2010-11-10 17 views
24

En Python, ¿cómo se obtiene la posición de un elemento en una lista (usando list.index) usando concordancia difusa?Python: obtener índices de lista utilizando la expresión regular?

Por ejemplo, ¿cómo obtengo los índices de todas las frutas del formulario *berry en la siguiente lista?

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

¿Alguien tiene alguna idea?

+1

Eso no es una expresión regular. – delnan

+2

Las expresiones regulares tampoco son borrosas. Todo lo contrario, en realidad: son muy estrictos y precisos. –

Respuesta

24

Probar:

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

rendimientos:

[0, 2] 

Reemplazar endswith con una lógica diferente de acuerdo a sus necesidades coincidentes.

39

Con expresiones regulares:

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

Y sin expresiones regulares:

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

Esta respuesta debería haber sido seleccionada como la respuesta. – brittenb

+0

Todavía me parece extraño que esta sea la forma más fácil de hacer esta operación bastante común en python. En R sería simplemente grep ('berry $', berry_idx). ¿No hay ningún módulo que implemente una forma más limpia de buscar y obtener ubicaciones enteras? –

Cuestiones relacionadas