2016-04-07 4 views
0

Ich habe etwas Licht gesucht, aber ich habe nichts Solides gefunden - total bereit, das zu löschen, wenn es ein Duplikat ist.Line-effizientere Methode, re.search zu verwenden, um eine Zeichenfolge in einer Liste abzugleichen?

Ich versuche, Lambda-Funktionen besser zu verstehen, und ich bin mir ziemlich sicher, dass ich sie die for-Schleife reduzieren kann in:

import re 
leest = ["one", "two", "three", "four"] 

x = "" 
for i in leest: 
    if re.search("th.*e", i): 
     x = i 

print "yay " + x + "!" 

Wodurch will ich nicht den passenden Begriff ziehen ist und Benutze es in der Funktion.

Ich habe List Verständnis und Karte, aber das scheint für die Durchführung von Arbeit wie das Hinzufügen von Elementen zu Listen oder die Verarbeitung von ihnen.

+1

Lambdas keinen Code effizienter machen. 'Break'ing, sobald Sie ein Spiel finden, würde es effizienter machen, obwohl. – user2357112

+0

Guter Ruf - Ich habe den Titel der Frage angepasst, ich suche nach einer weniger chaotisch aussehenden Lösung, die nicht unbedingt Effizienz verarbeitet. – Locane

+1

Möchten Sie mit dem ersten übereinstimmenden Eintrag, dem letzten übereinstimmenden Eintrag oder allen übereinstimmenden Einträgen umgehen? –

Antwort

2

Sie könnten next und einen Generator Ausdruck verwenden:

x = next(s for s in leest if re.search("th.*e", s)) 

Diese StopIteration erhöhen wird, wenn es keine Übereinstimmung finden. Wenn Sie "" auf Standard möchten, können Sie einen Standard zu next passieren:

x = next((s for s in leest if re.search("th.*e", s)), "") 
+1

Und wenn Sie alle Übereinstimmungen möchten, können Sie ein Listenverständnis verwenden. Wenn Sie die letzte Übereinstimmung (wie in Ihrem Beispiel) wollen, können Sie 'reversed (leest)' verwenden. –

+0

Soll das "i" in Ihrem Beispiel s sein? – Locane

+1

@Locane: In der Tat ist es. – user2357112

Verwandte Themen