Estoy buscando una forma pitónica de iterar sobre los primeros n
elementos de un iterable (upd: no una lista en un caso común, como para las listas, las cosas son triviales), y es muy importante hacerlo lo más rápido posible. Así es como lo hago ahora:iteración rápida sobre los primeros n elementos de un iterable (no una lista) en python
count = 0
for item in iterable:
do_something(item)
count += 1
if count >= n: break
No me parece limpio. Otra forma de hacer esto es:
for item in itertools.islice(iterable, n):
do_something(item)
Esto se ve bien, la cuestión es lo suficientemente rápido para usar con algún generador (s)? Por ejemplo:
pair_generator = lambda iterable: itertools.izip(*[iter(iterable)]*2)
for item in itertools.islice(pair_generator(iterable), n):
so_something(item)
¿Funcionará lo suficientemente rápido en comparación con el primer método? ¿Hay alguna manera más fácil de hacerlo?
La única manera de responder a "lo suficientemente rápido" es establecer criterios de referencia a sí mismo. –
Vea también: http://stackoverflow.com/questions/2688079/how-to-iterate-over-the-first-n-elements-of-a-list – outis
¿Por qué es "bastante importante hacer esto tan rápido como posible"? ¿Puedes justificar esto con resultados de pstats para un caso de uso realista? Sospecho que su solución con 'islice' en realidad demostrará la mejor solución razonable para el rendimiento, pero por supuesto no sabemos sin el tiempo. –