Ihr Beispiel funktioniert nicht, da die Variable word
nur bei der Auswertung der Bedingung existiert. Sobald die Suche abgeschlossen ist, ob die Bedingung wahr oder falsch ist, wird die Variable nicht mehr verwendet und existiert nicht mehr.
erklärt es auch zuerst nicht hilft, da sie nicht die vorhandenen Variablen beeinflusst:
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['slow', 'quick', 'brown', 'lazy']
word = None
if any(word in text for word in adjectives):
print(word)
Keine
Deshalb haben Sie es anders machen, die unter Verwendung von next
Funktion:
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['slow', 'quick', 'brown', 'lazy']
word = next((word for word in adjectives if word in text), None)
if word:
print(word)
schnell
Hinweis ist vielleicht word
eine irreführende Variablennamen hier, weil es nicht unbedingt haben ein ganzes Wort übereinstimmen. dh
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['slo', 'uick', 'rown', 'azy']
word = next((word for word in adjectives if word in text), None)
if word:
print(word)
urz
so könnte es am besten sein, den Text in Worte zu spalten zuerst:
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['slow', 'quick', 'brown', 'lazy']
word_list = text.split()
word = next((word for word in adjectives if word in word_list), None)
if word:
print(word)
aber beachten Sie, dass, wenn wir die Adjektive ändern bestellen:
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['brown', 'quick', 'slow', 'lazy']
word_list = text.split()
word = next((word for word in adjectives if word in word_list), None)
if word:
print(word)
erhalten wir:
braun
, die nicht das erste Adjektiv im Text ist.
Daher müssen wir in der Reihenfolge der Wörter im Text überprüfen, nicht die Reihenfolge der Adjektive in der Liste.
text = 'the quick brown fox jumps over the lazy dog'
adjectives = ['brown', 'quick', 'slow', 'lazy']
word_list = text.split() # NOTE: this "optimization" is no longer necessary now
word = next((word for word in word_list if word in adjectives), None)
if word:
print(word)
credit to HolyDanna for spotting this
Dies funktioniert nicht, da das ‚Wort‘ Objekt existiert nur während der Auswertung der Bedingung. Sobald festgestellt wurde, ob die Bedingung wahr oder falsch ist, existiert das Wort Objekt nicht mehr. – HolyDanna
Was ist die erwartete Ausgabe, wenn 'text = 'a b'' und' adjectives = [' b ',' a '] '? –
Wenn wir 'Adjektive = ['langsam', 'braun', 'faul', 'schnell']' als Liste der Adjektive verwenden würden, sollte es 'schnell' (zuerst im Text) oder 'braun' (Tannen in der Adjektivliste). (Das ist dasselbe wie Rawings Kommentar). Das Beispiel, das Sie geben, führt uns zur Verwirrung, da "schnell" das erste Adjektiv sowohl in der Liste von Adj als auch im Text ist .... – HolyDanna