una sacar palabra ordenamiento listas lista funciones elementos codigo busquedas busqueda buscar binarias binaria algoritmo python find sequence

sacar - Función de búsqueda de secuencia en Python



ordenamiento busqueda binaria python (4)

Aquí está el patrón que uso:

mylist = [10, 2, 20, 5, 50] found = next(i for i in mylist if predicate(i))

O, en Python 2.4 / 2.5, next() no es una incorporada:

found = (i for i in mylist if predicate(i)).next()

Tenga en cuenta que next() genera StopIteration si no se encontró ningún elemento. En la mayoría de los casos, eso es probablemente bueno. Usted solicitó el primer elemento, no existe tal elemento y, por lo tanto, es probable que el programa no pueda continuar.

Si, por otro lado, sabe qué hacer en ese caso, puede proporcionar un valor predeterminado a next():

conf_files = [''~/.foorc'', ''/etc/foorc''] conf_file = next((f for f in conf_files if os.path.exists(f)), ''/usr/lib/share/foo.defaults'')

¿Cómo encuentro un objeto en una secuencia que satisface un criterio particular?

Lista de comprensión y filtro que recorre toda la lista. ¿Es la única alternativa un lazo hecho a mano?

mylist = [10, 2, 20, 5, 50] find(mylist, lambda x:x>10) # Returns 20


Demasiado perezoso para escribir:

mylist = [10, 2, 20, 5, 50] max(mylist, key=lambda x: x>10)


En realidad, en Python 3, al menos, el filtro no pasa por toda la lista.

Para volver a comprobar:

def test_it(x): print(x) return x>10 var = next(filter(test_it, range(20)))

En Python 3.2, eso imprime 0-11, y asigna var a 11.

En las versiones 2.x de Python puede que necesite usar itertools.ifilter.


Si solo quieres los primeros más de 10 puedes usar itertools.ifilter :

import itertools first_gt10 = itertools.ifilter(lambda x: x>10, [10, 2, 20, 5, 50]).next()

Si desea que todos sean mayores que 10, puede ser más simple usar una list-comprehension :

all_gt10 = [i for i in mylist if i > 10]