proyectos ejemplos python list

python - ejemplos - ¿Cómo obtener la posición del artículo en una lista?



django (10)

Estoy iterando sobre una lista y quiero imprimir el índice del artículo si cumple una determinada condición. ¿Cómo haría esto?

Ejemplo:

testlist = [1,2,3,5,3,1,2,1,6] for item in testlist: if item == 1: print position


¿Por qué complicar las cosas?

testlist = [1,2,3,5,3,1,2,1,6] for position, item in enumerate(testlist): if item == 1: print position


¿Qué hay de lo siguiente?

print testlist.index(element)

Si no está seguro de si el elemento que busca está realmente en la lista, puede agregar una verificación preliminar, como

if element in testlist: print testlist.index(element)

o

print(testlist.index(element) if element in testlist else None)

o la "vía pitónica", que no me gusta tanto porque el código es menos claro, pero a veces es más eficiente,

try: print testlist.index(element) except ValueError: pass


Aquí hay otra forma de hacer esto:

try: id = testlist.index(''1'') print testlist[id] except: print "Not Found"


Creo que podría ser útil usar el método curselection () de la biblioteca de Tkinter:

from Tkinter import * listbox.curselection()

Este método funciona en los widgets de listbox de Tkinter, por lo que deberá construir uno de ellos en lugar de una lista.

Esto devolverá una posición como esta:

(''0'',) (aunque las versiones posteriores de Tkinter pueden devolver una lista de entradas en su lugar)

Cuál es para la primera posición y el número cambiará según la posición del artículo.

Para obtener más información, consulte esta página: http://effbot.org/tkinterbook/listbox.htm

Saludos.


Hmmm. Hubo una respuesta con una lista de comprensión aquí, pero desapareció.

Aquí:

[i for i,x in enumerate(testlist) if x == 1]

Ejemplo:

>>> testlist [1, 2, 3, 5, 3, 1, 2, 1, 6] >>> [i for i,x in enumerate(testlist) if x == 1] [0, 5, 7]

Actualizar:

De acuerdo, quieres una expresión de generador, tendremos una expresión de generador. Aquí está la lista de comprensión nuevamente, en un bucle for:

>>> for i in [i for i,x in enumerate(testlist) if x == 1]: ... print i ... 0 5 7

Ahora construiremos un generador ...

>>> (i for i,x in enumerate(testlist) if x == 1) <generator object at 0x6b508> >>> for i in (i for i,x in enumerate(testlist) if x == 1): ... print i ... 0 5 7

y lo suficientemente ingenioso, podemos asignar eso a una variable, y usarla desde allí ...

>>> gen = (i for i,x in enumerate(testlist) if x == 1) >>> for i in gen: print i ... 0 5 7

Y pensar que solía escribir FORTRAN.


Si su lista fue lo suficientemente grande y solo esperaba encontrar el valor en un número escaso de índices, considere que este código podría ejecutarse mucho más rápido porque no tiene que iterar todos los valores de la lista.

lookingFor = 1 i = 0 index = 0 try: while i < len(testlist): index = testlist.index(lookingFor,i) i = index + 1 print index except ValueError: #testlist.index() cannot find lookingFor pass

Si espera encontrar el valor mucho, probablemente debería agregar "índice" a una lista e imprimir la lista al final para ahorrar tiempo por iteración.


Use enumerate:

testlist = [1,2,3,5,3,1,2,1,6] for position, item in enumerate(testlist): if item == 1: print position


[x for x in range(len(testlist)) if testlist[x]==1]


for i in xrange(len(testlist)): if testlist[i] == 1: print i

xrange en lugar de rango según lo solicitado (ver comentarios).


testlist = [1,2,3,5,3,1,2,1,6] for id, value in enumerate(testlist): if id == 1: print testlist[id]

Supongo que es exactamente lo que quieres. ;-) ''id'' será siempre el índice de los valores en la lista.