python - index - encontrar el primer elemento de secuencia que coincide con un criterio
python list to string (2)
Si no tiene ningún otro índice o información ordenada para sus objetos, tendrá que iterar hasta que se encuentre dicho objeto:
next(obj for obj in objs if obj.val==5)
Sin embargo, esto es más rápido que una lista completa de comprensión. Compara estos dos:
[i for i in xrange(100000) if i == 1000][0]
next(i for i in xrange(100000) if i == 1000)
El primero necesita 5.75ms, el segundo 58.3µs (100 veces más rápido porque el bucle es 100 veces más corto).
Esta pregunta ya tiene una respuesta aquí:
¿Cuál sería la forma más elegante y eficiente de encontrar / devolver el primer elemento de la lista que coincida con un cierto criterio?
Por ejemplo, si tengo una lista de objetos y me gustaría obtener el primer objeto de aquellos con el atributo obj.val==5
. Por supuesto, podría usar la comprensión de lista, pero eso incurriría en O (n) y si n es grande, es un desperdicio. También podría usar un bucle con break
una vez que se cumpliera el criterio, pero pensé que podría haber una solución más pitónica / elegante.
a=[100,200,300,400,500]
def search(b):
try:
k=a.index(b)
return a[k]
except ValueError:
return ''not found''
print(search(500))
devolverá el objeto si lo encuentra, devolverá "no encontrado"