length index comprehension python list

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"