Respuestas:
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 comando args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
regresa'v1'
¿Qué pasa con lo siguiente?
print testlist.index(element)
Si no está seguro de si el elemento a buscar 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 "forma pitónica", que no me gusta mucho porque el código es menos claro, pero a veces es más eficiente,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange en lugar de rango según lo solicitado (ver comentarios).
xrange
se depraga en Python 3.x, ya que lo nuevo range
es lo viejoxrange
Aquí hay otra forma de hacer esto:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
[x for x in range(len(testlist)) if testlist[x]==1]
Prueba lo siguiente:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
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.
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 mucho el valor, probablemente debería agregar "índice" a una lista e imprimir la lista al final para ahorrar tiempo por iteración.
Creo que podría ser útil utilizar el método curselection () de la biblioteca Tkinter:
from Tkinter import *
listbox.curselection()
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.
Solo para ilustrar el ejemplo completo junto con el input_list
que tiene searies1
(ejemplo: input_list [0]) en el que desea hacer una búsqueda series2
(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 simples
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
salida:
[0, 2, 6]