J'ai une liste de chaînes:

animals = ["cat meow ", "dog bark"]

Et je veux vérifier si chaque chaîne contient le mot "cow" qui n'existe évidemment pas dans ma liste ci-dessus. J'essaie d'écrire une déclaration if else qui vérifie si je suis à la fin de la liste et si la vache n'est pas trouvée print "not found ".

Le code ci-dessous imprime non trouvé pour chaque élément qui ne contient pas la chaîne mais je veux imprimer "non trouvé" une seule fois quand j'itère toute ma liste à la fin mais je ne connais pas la syntaxe correcte.

animals = ['dog bark' , 'cat meow ']
for pet in animals:
  if 'cow' in pet:
    print('found')
  else:
    print('not  found') 
3
Vasilis Skentos 18 juin 2020 à 13:17

5 réponses

Meilleure réponse

Vous pouvez réaliser que l'impression non trouvée sera imprimée une fois par

animals = ['dog bark' , 'cat meow ']
for i, pet in enumerate(animals):
  if 'cow' in pet:
    print('found')
    break
  elif i+1 == len(animals):
    print('not  found') 

Ou en une seule ligne

print("found" if [i for i in animals if "cow" in i] else "not  found")

Ce code imprimera trouvé et quittera la boucle s'il y a une vache dans l'un des autres, il enregistrera le dernier élément de celui-ci, la vache pas dans l'élément, puis il affichera «non trouvé».

0
Leo Arad 18 juin 2020 à 10:34

Cela semble être un bon cas d'utilisation de la fonction any () de Python, qui renvoie True si l'un des éléments d'un itérable est vrai.

animals = ['dog bark' , 'cat meow ']
has_cow = any('cow' in a for a in animals)
print('found' if has_cow else 'not found')

Mais, si vous êtes très impatient d'utiliser une boucle for, vous pouvez soit utiliser une variable d'indicateur pour savoir si vous avez trouvé l'élément dans la boucle, soit profiter de l'étrange for-else (la clause else s'exécute si la boucle n'a pas été interrompue). En plus d'une douzaine d'années de programmation Python, je n'ai jamais utilisé for-else, donc c'est vraiment juste une curiosité linguistique, et je le déconseille fortement. Mais cela fonctionne pour ce problème spécifique!

for a in animals:
    if 'cow' in a:
        print('found')
        break
else:                      # WTF!?!  Don't do this, folks.
    print('not found')
5
FMc 18 juin 2020 à 10:30

La plupart des langages de programmation autorisent l'utilisation d'instructions else avec des instructions conditionnelles if uniquement . Cependant, en Python, l'instruction else peut également être utilisée avec des boucles for , dont la plupart d'entre nous ne sont pas familiers. Généralement, for / else est utilisé pour exécuter une boucle lorsque nous recherchons un élément. Par exemple:

lis=[1,2,3]
for i in lis:
    if i==1:
        print("1 found in list.")
        break
else:
    print("1 is not in list.")

Ce code s'imprimera: 1 found in list. Lorsque la boucle s'exécute, i prend des valeurs dans la liste, et l'instruction if vérifiera les conditions fournies, si la condition est vraie, l'instruction d'impression sera exécutée. Après cela, l'instruction break est exécutée, ce qui rompt le flux de contrôle dans le code. L'instruction Break en Python est utilisée pour sortir le contrôle de la boucle, lorsqu'une condition est déclenchée.

Ainsi, le code de la question peut correctement être écrit comme suit:

animals=["dog bark","cat meow"]
for pet in animals:
    if 'cow' in pet:
        print("Found")
        break'
else:
    print("not found")

Cela imprimera le résultat souhaité!

J'espère que cela aide!

1
Amitai Irron 18 juin 2020 à 16:32

Le drapeau est utile dans de telles situations

flag = False
animals = ['dog bark' , 'cat meow']
for pet in animals:
  if 'cow' in pet:
      print("Found")
      flag = True

if flag == False:
    print("Not found")

Il imprimera "Not Found"

Pour animals = ['dog bark', 'cat meow', "cow moo"], il imprimera "Found".

1
Muhammad Naufil 18 juin 2020 à 10:35
animals = ['dog bark' , 'cat meow ']

print('found' if any('cow' in pet for pet in animals) else 'not found')

Cela fonctionne aussi avec des variables;

result = 'found' if any('cow' in pet for pet in animals) else 'not found'
5
Sy Ker 19 juin 2020 à 05:28