En cuanto a su primera pregunta: ese código está perfectamente bien y debería funcionar si item
es igual a uno de los elementos dentro myList
. Tal vez intente encontrar una cadena que no coincida exactamente con uno de los elementos o tal vez esté utilizando un valor flotante que sufre de inexactitud.
En cuanto a su segunda pregunta: en realidad hay varias formas posibles de "encontrar" cosas en las listas.
Comprobando si hay algo adentro
Este es el caso de uso que describe: Verificar si algo está dentro de una lista o no. Como sabes, puedes usar el in
operador para eso:
3 in [1, 2, 3] # => True
Filtrando una colección
Es decir, encontrar todos los elementos en una secuencia que cumplan una determinada condición. Puede usar la comprensión de listas o expresiones generadoras para eso:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Este último devolverá un generador que puede imaginar como una especie de lista perezosa que solo se creará tan pronto como lo repita. Por cierto, el primero es exactamente equivalente a
matches = filter(fulfills_some_condition, lst)
en Python 2. Aquí puede ver las funciones de orden superior en funcionamiento. En Python 3, filter
no devuelve una lista, sino un objeto tipo generador.
Encontrar la primera ocurrencia
Si solo quiere lo primero que coincide con una condición (pero aún no sabe qué es), está bien usar un bucle for (posiblemente también usando la else
cláusula, que no es muy conocida). También puedes usar
next(x for x in lst if ...)
que devolverá el primer partido o aumentará a StopIteration
si no se encuentra ninguno. Alternativamente, puedes usar
next((x for x in lst if ...), [default value])
Encontrar la ubicación de un artículo
Para las listas, también existe el index
método que a veces puede ser útil si desea saber dónde está un determinado elemento en la lista:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Sin embargo, tenga en cuenta que si tiene duplicados, .index
siempre devuelve el índice más bajo: ......
[1,2,3,2].index(2) # => 1
Si hay duplicados y desea todos los índices, puede usar enumerate()
en su lugar:
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.