wake-up-neo.com

Prüfen Sie, ob sich der Teilstring in einer Liste von Strings befindet.

Ich habe schon einige Antworten auf diese Frage gefunden, aber sie scheinen für die aktuellen Python-Versionen veraltet zu sein (oder zumindest funktionieren sie nicht für mich).

Ich möchte prüfen, ob eine Teilzeichenfolge in einer Liste von Zeichenfolgen enthalten ist. Ich brauche nur das boolesche Ergebnis.

Ich habe diese Lösung gefunden:

Word_to_check = 'or'
wordlist = ['yellow','orange','red']

result = any(Word_to_check in Word for Word in worldlist)

Von diesem Code würde ich erwarten, einen True-Wert zu erhalten. Wenn das Wort "der" war, sollte die Ausgabe False sein.

Das Ergebnis ist jedoch eine Generatorfunktion, und ich kann keinen Weg finden, um den True-Wert abzurufen.

Irgendeine Idee?

33
Álvaro

Sie können any aus __builtin__ importieren, falls sie durch eine andere any ersetzt wurde:

>>> from  __builtin__ import any as b_any
>>> lst = ['yellow', 'orange', 'red']
>>> Word = "or"
>>> b_any(Word in x for x in lst)
True

Beachten Sie, dass __builtin__ in Python 3 in builtins umbenannt wurde.

26

Der Code, den Sie mit any () gepostet haben, ist korrekt und sollte funktionieren, wenn Sie ihn nicht irgendwo neu definiert haben.

Allerdings gibt es eine einfache und schnelle Lösung, wenn Sie die Teilzeichenfolgen-Suche für eine einzige kombinierte Zeichenfolge verwenden:

>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)

>>> 'or' in combined
True
>>> 'der' in combined
False

Dies sollte viel schneller als der Ansatz mit any funktionieren. Das Join-Zeichen kann ein beliebiges Zeichen sein, das nicht in einem der Wörter in der Wortliste vorkommt.

25

Sie können stattdessen next verwenden:

colors = ['yellow', 'orange', 'red'] 
search = "or"

result = next((True for color in colors if search in color), False)

print(result) # True

So zeigen Sie die Zeichenfolge an, die die Teilzeichenfolge enthält:

colors = ['yellow', 'orange', 'red'] 
search = "or"

result = [color for color in colors if search in color]  

print(result) # Orange
6
stderr

Wenn jemand überprüfen möchte, ob Werte eines Wörterbuchs als Teilzeichenfolge in einer Liste von Zeichenfolgen vorhanden sind, können Sie Folgendes verwenden:

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 

Es druckt

not found
found
0
Kostas Demiris