2016-11-15 2 views
1

Ich weiß, dass diese etwas sehr einfach sein wird, aber es funktioniert einfach nicht für mich.Finden Sie Vorkommen eines beliebigen Werts in einem Array in einer Zeichenfolge und drucken Sie

INDICATORS = ['dog', 'cat', 'bird'] 
STRING_1 = 'There was a tree with a bird in it' 
STRING_2 = 'The dog was eating a bone' 
STRING_3 = "Rick didn't let morty have a cat" 


def FindIndicators(TEXT): 
    if any(x in TEXT for x in INDICATORS): 
     print x # 'x' being what I hoped was whatever the match would be (dog, cat) 

Erwartete Ausgabe:

FindIndicators(STRING_1) 
# bird 

FindIndicators(STRING_2) 
# dog 

FindIndicators(STRING_3) 
# cat 

Statt ich ein ungelöstes getting 'x'. Ich habe das Gefühl, dass ich dem Schreibtisch gegenüberstehe, sobald ich eine Antwort sehe.

+1

'x' ist so definiert, dass es nur innerhalb des Listenverständnisses existiert. Sie müssen tatsächlich einen Wert aus dem iterablen Wert abrufen, um ihn verwenden zu können. Ich empfehle die integrierte [nächste] (https://docs.python.org/3.6/library/functions.html#next) – Hamms

Antwort

3

Sie missverstehen, wie any() funktioniert. Es verbraucht was immer du gibst und gibt Wahr oder Falsch zurück. x existiert nicht nach.

>>> INDICATORS = ['dog', 'cat', 'bird'] 
>>> TEXT = 'There was a tree with a bird in it' 
>>> [x in TEXT for x in INDICATORS] 
[False, False, True] 
>>> any(x in TEXT for x in INDICATORS) 
True 

Statt dies tun:

>>> for x in INDICATORS: 
...  if x in TEXT: 
...   print x 
... 
bird 
+0

Sehr geschätzt, das macht viel mehr Sinn. –

+0

Denken Sie daran, dass "wenn x in TEXT" mit Teilzeichenfolgen übereinstimmt, so dass "Katze" mit "Kategorie" und "gestreut" übereinstimmt. Vielleicht möchten Sie den Test verwenden, den @prune verwendet: 'if x in TEXT.split()' was besagt, dass 'x' eines der gesamten Wörter in TEXT ist. – Harvey

2

Wie in der Dokumentation beschrieben, jede gibt einen Booleschen Wert, nicht eine Liste von Übereinstimmungen. Dieser Aufruf zeigt nur das Vorhandensein von mindestens einem "Treffer" an.

Die Variable x existiert nur innerhalb des Generatorausdrucks; Es ist in der Zeile nach, so dass Sie es nicht drucken können.

INDICATORS = ['dog', 'cat', 'bird'] 
STRING_1 = 'There was a tree with a bird in it' 
STRING_2 = 'The dog was eating a bone' 
STRING_3 = "Rick didn't let morty have a cat" 


def FindIndicators(TEXT): 
    # This isn't the most Pythonic way, 
    # but it's near to your original intent 
    hits = [x for x in TEXT.split() if x in INDICATORS] 
    for x in hits: 
     print x 

print FindIndicators(STRING_1) 
# bird 

print FindIndicators(STRING_2) 
# dog 

print FindIndicators(STRING_3) 
# cat 
Verwandte Themen