2012-06-29 7 views
6

En Python, ¿hay alguna forma de escribir esta lista de comprensión sin la variable "x in" (ya que se deja completamente sin usar) ? Lo mismo se aplica a una expresión de generador. Dudo que esto surja muy a menudo, pero me encontré con esto unas cuantas veces y tenía curiosidad por saberlo.Crear una expresión de generador o comprensión de lista sin variable "x in" (por ejemplo, para rango) en Python

He aquí un ejemplo: (¿quizá también, hay una manera más elegante para construir este)

week_array = ['']*7 
four_weeks = [week_array[:] for x in range(4)] 

+0

¿Por qué no 'week_array * 4'? – phg

+2

@phg: Eso dará como resultado 4 referencias a la misma lista. –

+0

@Ignacio Oh, claro ... solía olvidar eso, ¡gracias! – phg

Respuesta

15

No lo creo, y no hay daño en el x. Una cosa común ver cuando un valor no se utiliza de esta manera es utilizar un subrayado como variable libre, ej .:

[week_array[:] for _ in range(4)] 

Pero no es nada más que una convención para indicar que la variable libre no se utiliza.

2

Nº Ambas construcciones necesidad tiene un iterador, incluso si su valor es no usado.

1
week_array = ['']*7 
four_weeks = map(list, [week_array]*4) 
0

Esto es similar a otras respuestas, en eso yo uso el mapa, pero lo que hice usa la misma función que usted está usando.

four_weeks = map(lambda i: week_array[:], range(4)) 

También, la principal ventaja en comparación al uso _ por ejemplo, es que ya se podría utilizar (_ es utilizado por gettext a menudo) y cambia su valor en al último elemento del iterador. Vea este ejemplo:

[x for x in range(4)] 
assert x == 3, 'x should be equal to 3' 
Cuestiones relacionadas