2010-11-10 10 views
24

In Python, come si ottiene la posizione di un elemento in un elenco (utilizzando list.index) utilizzando la corrispondenza sfocata?Python: ottieni gli indici delle liste usando l'espressione regolare?

Ad esempio, come si ottengono gli indici di tutti i frutti del modulo *berry nell'elenco seguente?

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

Qualcuno ha qualche idea?

+1

Questo non è un'espressione regolare. – delnan

+2

Anche le espressioni regolari non sono sfocate. Al contrario, in realtà: sono molto severi e precisi. –

risposta

24

Prova:

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

rendimenti:

[0, 2] 

Sostituire endswith con una logica diversa in base alle proprie esigenze di corrispondenza.

39

con le espressioni regolari:

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

e senza espressioni regolari:

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

Questa risposta avrebbe dovuto essere selezionata come risposta. – brittenb

+0

Continuo a trovare strano che questo sia il modo più semplice per eseguire questa operazione abbastanza comune in python. In R sarebbe solo grep ('berry $', berry_idx). Non esiste un modulo che implementa un modo più semplice per cercare e ottenere posizioni integer? –

Problemi correlati