Estoy iterando sobre una lista y quiero imprimir el índice del elemento 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
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:
Bien, si quieres una expresión generadora, tendremos una expresión generadora. Aquí está la lista de comprensión nuevamente, en un ciclo 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 usarlo 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.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Entonces el comandoargs[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
regresa'v1'
¿Qué pasa con lo siguiente?
Si no está seguro de si el elemento a buscar está realmente en la lista, puede agregar una verificación preliminar, como
o
o la "forma pitónica", que no me gusta mucho porque el código es menos claro, pero a veces es más eficiente,
fuente
ValueError
Use enumerate:
fuente
xrange en lugar de rango según lo solicitado (ver comentarios).
fuente
xrange
se depraga en Python 3.x, ya que lo nuevorange
es lo viejoxrange
Aquí hay otra forma de hacer esto:
fuente
fuente
Prueba lo siguiente:
fuente
Si su lista se hizo 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 repetir cada valor en la lista.
Si espera encontrar mucho el valor, probablemente debería agregar "índice" a una lista e imprimir la lista al final para ahorrar tiempo por iteración.
fuente
Creo que podría ser útil utilizar el método curselection () de la biblioteca Tkinter:
Este método funciona en los widgets de cuadro de lista 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)
Cuál es para la primera posición y el número cambiará de acuerdo con la posición del artículo.
Para obtener más información, consulte esta página: http://effbot.org/tkinterbook/listbox.htm
Saludos.
fuente
¿Por qué complicar las cosas?
fuente
Solo para ilustrar el ejemplo completo junto con el
input_list
que tienesearies1
(ejemplo: input_list [0]) en el que desea hacer una búsquedaseries2
(ejemplo: input_list [1]) y obtener índices de series2 si existen en series1.Nota: Tu
certain condition
irá en expresión lambda si las condiciones son simplessalida:
fuente
Supongo que es exactamente lo que quieres. ;-) 'id' será siempre el índice de los valores en la lista.
fuente