¿Existe alguna forma más elegante de escribir la siguiente pieza de Python?¿Omitir iterador en la lista de comprensión?
[foo() for i in range(10)]
quiero acumular los resultados de foo() en una lista, pero no necesito el iterador i.
¿Existe alguna forma más elegante de escribir la siguiente pieza de Python?¿Omitir iterador en la lista de comprensión?
[foo() for i in range(10)]
quiero acumular los resultados de foo() en una lista, pero no necesito el iterador i.
Una forma de hacer esto es utilizar _
:
[foo() for _ in range(10)]
Esto significa exactamente lo mismo, pero, por convención, el uso de _
indica al lector que el índice no se utiliza realmente para nada.
Presumiblemente foo()
devuelve algo diferente cada vez que lo llamas. Si no lo hace, y se devuelve el mismo cada vez, a continuación, se puede:
[foo()] * 10
para replicar el resultado de llamar foo()
una vez, 10 veces en una lista.
De ninguna manera más elegante, pero:
[x() for x in [foo]*10]
creo que más allá de que tiene que ir a Ruby;)
map(lambda _ : foo(), range(10))
aunque esto oficios su problema con un iterador sentido i con un nuevo argumento sin sentido para la expresión lambda.
map
sería bueno si foo() tomó una discusión, pero no es así. Así que en lugar, crear una lambda ficticia que toma un argumento entero, pero sólo las llamadas foo():
map(lambda i:foo(), range(10))
Si usted está en Python 3.x, mapa muestra un iterador en lugar de una lista - acaba de construir una lista con it:
list(map(lambda i:foo(), range(10)))
¿Vota? ¿Cómo? – PaulMcG