J'ai déjà trouvé des réponses à cette question, mais elles semblent obsolètes pour les versions actuelles de Python (ou du moins, elles ne fonctionnent pas pour moi).
Je veux vérifier si une sous-chaîne est contenue dans une liste de chaînes. Je n'ai besoin que du résultat booléen.
J'ai trouvé cette solution:
Word_to_check = 'or'
wordlist = ['yellow','orange','red']
result = any(Word_to_check in Word for Word in worldlist)
De ce code, je m'attendrais à obtenir une valeur True
. Si le mot était "der", alors le résultat devrait être False
.
Cependant, le résultat est une fonction génératrice et je ne trouve pas de moyen d'obtenir la valeur True
.
Une idée?
Vous pouvez importer any
à partir de __builtin__
s'il a été remplacé par un autre any
:
>>> from __builtin__ import any as b_any
>>> lst = ['yellow', 'orange', 'red']
>>> Word = "or"
>>> b_any(Word in x for x in lst)
True
Notez que dans Python 3, __builtin__
a été renommé en builtins
.
Le code que vous avez publié en utilisant any () est correct et devrait fonctionner à moins que vous ne le redéfinissiez quelque part.
Cela dit, il existe une solution simple et rapide en utilisant la recherche de sous-chaîne sur une seule chaîne combinée:
>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)
>>> 'or' in combined
True
>>> 'der' in combined
False
Cela devrait fonctionner beaucoup plus rapidement que l’approche utilisant any . Le caractère de jointure peut être n'importe quel caractère qui ne figure pas dans l'un des mots de la liste de mots.
Vous pouvez utiliser next
à la place:
colors = ['yellow', 'orange', 'red']
search = "or"
result = next((True for color in colors if search in color), False)
print(result) # True
Pour afficher la chaîne contenant la sous-chaîne:
colors = ['yellow', 'orange', 'red']
search = "or"
result = [color for color in colors if search in color]
print(result) # Orange
Aussi, si quelqu'un veut vérifier si l'une des valeurs d'un dictionnaire existe en tant que sous-chaîne dans une liste de chaînes, peut utiliser ceci:
list_a = [
'Copy of snap-009ecf9feb43d902b from us-west-2',
'Copy of snap-0fe999422014504b6 from us-west-2',
'Copy of snap-0fe999422014cscx504b6 from us-west-2',
'Copy of snap-0fe999422sdad014504b6 from us-west-2'
]
dict_b = {
'/dev/xvda': 'snap-0fe999422014504b6',
'/dev/xvdsdsa': 'snap-sdvcsdvsdvs'
}
for b1 in dict_b.itervalues():
result = next( ("found" for a1 in a if b1 in a1), "not found")
print result
Il imprime
not found
found