Comment vérifier si une variable correspond à tout élément dans la liste à l'aide de la toute fonction?
Edit: c'est Ce que je suis en train de faire:
Je demande à l'utilisateur de saisir un mois. puis le code de recherche si le mois est correct en vérifiant chaque élément dans months_list. Si elle ne trouve pas, je veux lui/elle pour entrer dans le mois de nouveau..
Voici le code:
months_list=["January", "February", "March", "April", "May", "June", "July"]
answer=raw_input("Month? \n")
while any(item.lower() != answer.lower() for item in months_list):
print("Sorry, didn't recognize your answer, try again")
answer=raw_input("Type in Month\n")
Cependant cela permet de maintenir le bouclage, peu importe si le mois est trouvée dans la liste ou pas.. j'espère que c'est une bonne clarifaction.. je vous remercie tous à l'avance
Vos attentes de
La "bonne" façon d'utiliser
Est ce que vous essayez de ne pas travailler d'une certaine façon, quel est votre question?
J'ai édité la question..
any
est faux. Il faudrait vérifier si l'objet iterable est vide ou pas.La "bonne" façon d'utiliser
any
ici est any(x == 'A' for x in a)
, mais vous devriez utiliser in
.Est ce que vous essayez de ne pas travailler d'une certaine façon, quel est votre question?
J'ai édité la question..
OriginalL'auteur Aous1000 | 2014-04-09
Vous devez vous connecter pour publier un commentaire.
Le problème est que
any()
retourneTrue
si tout un des éléments dans l'itérable estTrue
, de sorte que votre code conserve en boucle tant que la réponse n'est pas égal à tous les chaînes dansmonths_list
—ce qui est probablement le contraire de ce que vous voulez arriver. Voici une façon de l'utiliser qui s'arrête ou des ruptures de la boucle si la réponse correspond à tout des cordes:Comme d'autres l'ont souligné, il serait plus simple d'utiliser Python
in
opérateur, cependant, de cette façon encore les résultats dans une recherche linéaire O(n), exécuté...donc encore mieux (plus rapide) approche serait d'utiliser unset
de l'écrit en minusculemonth_names
, qui serait d'utiliser une table de hachage en fonction look-up, O(1), au lieu d'une recherche linéaire:OriginalL'auteur martineau
any(a)
signifie "est un élément dea
truthy"? Et le résultat estTrue
parce que chaque élément dea
est truthy. (Non-chaîne de longueur nulle est truthy, et chaque élément dea
est un non-chaîne de longueur nulle.)Et puis vous êtes à la comparaison de ce résultat,
True
, à, disons,"A"
.True
n'est pas égal à"A"
donc le résultat de que comparaison est, bien sûr,False
.Ce que vous souhaitez faire est sans doute quelque chose comme:
Si vous devez utiliser
any()
pour une raison quelconque, essayez:Cette approche a l'avantage d'être en mesure de faire imprécis comparaisons facilement (
in
ne faire des comparaisons exactes). Par exemple:Qui est maintenant totalement différente de celle que j'ai répondu, en faisant cette réponse totalement inutile. 🙁
OriginalL'auteur kindall
Pour vérifier l'adhésion, l'utilisation
in
:OriginalL'auteur bgporter