2009-02-06 14 views
35

¿Hay alguna métodos incorporados que forman parte de las listas que me darían el primer y el último índice de algún valor, como:Encontrar primero y el último índice de algún valor en una lista en Python

verts.IndexOf(12.345) 
verts.LastIndexOf(12.345) 
+1

Tal vez deba leer las listas en los documentos de Python: http://docs.python.org/library/stdtypes.html#mutable-sequence-types. Creo que será mucho más rápido que hacer muchas preguntas. –

+2

Los estoy leyendo también, pero no saber nada sobre Python hace las cosas más difíciles. Encuentro su sintaxis muy críptica. –

+0

Si sus listas están ordenadas, le recomendamos que consulte el módulo bisect . –

Respuesta

59

Las secuencias tienen un método index(value) que devuelve el índice de la primera aparición; en este caso, sería verts.index(value).

Puede ejecutarlo en verts[::-1] para averiguar el último índice. Aquí, esto sería len(verts) - 1 - verts[::-1].index(value)

+0

Gracias, ¿cómo se realiza? lista [:: - 1]? verts [:: - 1]? –

+0

sí, he editado la respuesta – SilentGhost

+2

Por cierto [:: - 1] invierte la lista, ¿verdad? Entonces tengo que compensar el índice, ¿verdad? –

14

Uso i1 = yourlist.index(yourvalue) y i2 = yourlist.rindex(yourvalue).

+13

Python _strings_ tiene 'rindex', pero las listas no. –

+0

Lo siento, tienes razón. Olvidé que las listas no tienen rindex. Necesitas invertir la lista. –

+9

Cierto, pero 'rindex' es lo que muchos lectores están buscando ... –

11

si usted está buscando el índice de la última ocurrencia de mivalor en milista:

len(mylist) - mylist[::-1].index(myvalue) - 1 
7

Como una pequeña función auxiliar:

def rindex(mylist, myvalue): 
    return len(mylist) - mylist[::-1].index(myvalue) - 1 
2

Este método puede ser más optimizado que el anterior

def rindex(iterable, value): 
    try: 
     return len(iterable) - next(i for i, val in enumerate(reversed(iterable)) if val == value) - 1 
    except StopIteration: 
     raise ValueError 
+1

"Optimizado" en el sentido de ser más eficiente en el uso del espacio, pero es aproximadamente un 50% más lento. – dubiousjim

Cuestiones relacionadas