2010-11-10 8 views
24

In Python, wie erhalten Sie die Position eines Elements in einer Liste (mit list.index) mit Fuzzy-Matching?Python: Listenindizes mit regulärem Ausdruck abrufen?

Zum Beispiel, wie bekomme ich die Indizes aller Früchte des Formulars *berry in der folgenden Liste?

fruit_list = ['raspberry', 'apple', 'strawberry'] 
# Is it possible to do something like the following? 
berry_fruit_at_positions = fruit_list.index('*berry') 

Wer hat irgendwelche Ideen?

+1

Das ist nicht ein regulärer Ausdruck ist. – delnan

+2

Reguläre Ausdrücke sind auch nicht unscharf. Ganz im Gegenteil: Sie sind sehr streng und präzise. –

Antwort

24

Versuchen:

fruit_list = ['raspberry', 'apple', 'strawberry'] 
[ i for i, word in enumerate(fruit_list) if word.endswith('berry') ] 

kehrt:

[0, 2] 

ersetzen endswith mit einer anderen Logik nach Ihrem Anpassungsbedarf.

39

mit regulären Ausdrücken:

import re 
fruit_list = ['raspberry', 'apple', 'strawberry'] 
berry_idx = [i for i, item in enumerate(fruit_list) if re.search('berry$', item)] 

Und ohne reguläre Ausdrücke:

fruit_list = ['raspberry', 'apple', 'strawberry'] 
berry_idx = [i for i, item in enumerate(fruit_list) if item.endswith('berry')] 
+0

Diese Antwort hätte als Antwort gewählt werden sollen. – brittenb

+0

Ich finde es immer noch seltsam, dass dies der einfachste Weg ist, um diese ziemlich häufige Operation in Python zu machen. In R wäre es nur grep ('berry $', berry_idx). Gibt es kein Modul, das eine sauberere Methode zum Suchen und Abrufen ganzzahliger Orte implementiert? –

Verwandte Themen