2016-03-31 7 views
0

Ich habe eine Liste, und ich möchte herausfinden, ob die Zeichenfolge in der Liste der Zeichenfolgen vorhanden ist.Wie überprüft man, ob die Teilzeichenfolge in einer Liste von Zeichenfolgen in Python

li = ['Convenience','Telecom Pharmacy'] 
txt = '1 convenience store' 

Ich möchte mit dem Convenience aus der Liste der txt übereinstimmen.

Ich habe

versucht
if any(txt.lower() in s.lower() for s in li): 
    print s 

print [s for s in li if txt in s] 

Beide Methoden nicht den Ausgang gegeben hat.

Wie die Teilzeichenfolge mit der Liste übereinstimmen?

+3

Eine Nadel, die größer ist als ein Heuhaufen, wird niemals in einem Heuhaufen gefunden. –

+0

@AlexReynolds ziemlich ironisch, oder? – n00dl3

Antwort

0

Ich denke, Split ist Ihre Antwort. Hier ist die Beschreibung aus der Python-Dokumentation:

string.split (s [, sep [, maxsplit]])

Zurück eine Liste der Wörter des Strings s. Wenn das optionale zweite Argument sep nicht vorhanden oder None ist, werden die Wörter durch willkürliche Zeichenfolgen von Leerzeichen (Leerzeichen, Tabulator, Zeilenumbruch, Rückgabe, Formfeed) getrennt. Wenn das zweite Argument sep vorhanden ist und nicht None, gibt es eine Zeichenfolge an, die als Worttrennzeichen verwendet werden soll. Die zurückgegebene Liste hat dann ein weiteres Element als die Anzahl der nicht überlappenden Vorkommen des Trennzeichens in der Zeichenfolge. Wenn maxsplit angegeben ist, wird unter die meiste maxsplit-Anzahl der Splits und der Rest der Zeichenfolge als letztes Element der Liste zurückgegeben (daher hat die Liste höchstens maxsplit + 1 Elemente). Wenn maxsplit nicht angegeben ist oder -1, dann ist die Anzahl der Splits nicht begrenzt (alle möglichen Splits sind ).

Das Verhalten von Split in einer leeren Zeichenfolge hängt vom Wert von sep ab. Wenn sep nicht angegeben oder als None angegeben ist, lautet das Ergebnis eine leere Liste. Wenn sep als eine beliebige Zeichenfolge angegeben wird, wird das Ergebnis eine Liste sein, die ein Element enthält, das eine leere Zeichenfolge ist.

Verwenden Sie den Split-Befehl für Ihre txt-Variable. Es wird Ihnen eine Liste zurück geben. Sie können dann auf den beiden Listen einen Vergleich durchführen, um Übereinstimmungen zu finden. Ich persönlich würde die verschachtelten for-Schleifen schreiben, um die Listen manuell zu überprüfen, aber Python bietet viele Werkzeuge für den Job. Der folgende Link beschreibt verschiedene Ansätze zum Abgleich zweier Listen.

How can I compare two lists in python and return matches

Genießen. :-)

+1

Das Beispiel von massiou benutzt Split in seinem Schnittpunktbefehl . – codingCat

0

Sie können dies versuchen,

>> list1 = ['Convenience','Telecom Pharmacy'] 

>> txt = '1 convenience store' 

>> filter(lambda x: txt.lower().find(x.lower()) >= 0, list1) 
['Convenience'] 

# Or you can use this as well 

>> filter(lambda x: x.lower() in txt.lower(), list1) 
['Convenience'] 
+0

Warum nicht 'Lambda x: x.lower() in txt' verwenden? – zondo

+0

Ich denke, wir können das auch verwenden. – Anurag

3

könnten Sie set() und intersection verwenden:

In [19]: set.intersection(set(txt.lower().split()), set(s.lower() for s in list1)) 
Out[19]: {'convenience'} 
+0

Ich denke etwas wie 'set (txt.lower(). Split()) & set (s.lower() für s in list1)' wäre einfacher zu lesen – MaxU

-1

Ich sehe zwei Dinge.

Möchten Sie herausfinden, ob die Musterzeichenfolge EXAKT mit einem Element in der Liste übereinstimmt? In diesem Fall nichts einfacher:

if txt in list1: 
    #do something 

Sie können tun txt.upper auch() oder .unterhalb(), wenn Sie die Liste Fall wollen unempfindlich Aber Wenn Sie, wie ich will verstehen, zu finden, wenn es eine Zeichenfolge (in der Liste), die Teil von txt ist, müssen Sie "für" Schleife verwenden:

def find(list1, txt): 
#return item if found, false otherwise 
for i in list1: 
    if i.upper() in txt.upper(): return i 

return False 

Es sollte funktionieren.

Console Ausgabe:

>>>print(find(['Convenience','Telecom Pharmacy'], '1 convenience store')) 
Convenience 
>>> 
Verwandte Themen