2012-07-13 21 views
13

¿Alguien me puede explicar la última línea de este fragmento de código Python?¿Qué hace un bucle for dentro de una lista en Python?

Cell es solo otra clase. No entiendo cómo se usa el bucle for para almacenar objetos Cell en el objeto Column.

class Column(object): 

    def __init__(self, region, srcPos, pos): 

     self.region = region 
     self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line. 
+2

se llama una 'lista de comprensión' –

Respuesta

29

La línea de código que está solicitando está utilizando list comprehension para crear una lista y asignar los datos recopilados en esta lista al self.cells. Es equivalente a

self.cells = [] 
for i in xrange(region.cellsPerCol): 
    self.cells.append(Cell(self, i)) 

Explicación:

Para explicar mejor cómo funciona esto, algunos ejemplos simples podrían ser instructiva para ayudar a entender el código que tiene. Si vas a seguir trabajando con el código de Python, volverás a encontrar la comprensión de la lista y es posible que quieras usarla tú mismo.

Nota, en el ejemplo a continuación, los dos segmentos de código son equivalente en que crean una list de valores almacenados en la lista de myList.

Por ejemplo:

myList = [] 
for i in range(10): 
    myList.append(i) 

es equivalente a

myList = [i for i in range(10)] 

listas por comprensión puede ser más compleja también, así por ejemplo, si usted tenía alguna condición que determina si los valores deben ir en una lista que también podría expresar esto con la lista de comprensión.

Este ejemplo sólo recoge los valores de número par en la lista:

myList = [] 
for i in range(10): 
    if i%2 == 0:  # could be written as "if not i%2" more tersely 
     myList.append(i) 

y la lista equivalente de comprensión:

myList = [i for i in range(10) if i%2 == 0] 

Dos notas finales:

  • se puede tener "anidado "enumera las temores, pero rápidamente se vuelven difíciles de comprender :)
  • La comprensión de la lista se ejecutará más rápido que el equivalente para-loop, y por lo tanto es a menudo un favorito de los programadores regulares de Python que están preocupados por la eficiencia.

Ok, un último ejemplo que muestra que también puede aplicar funciones a los elementos que está iterando en la lista.Esto utiliza float() para convertir una lista de cadenas de valores flotantes:

data = ['3', '7.4', '8.2'] 
new_data = [float(n) for n in data] 

da:

new_data 
[3.0, 7.4, 8.2] 
1

Es lo mismo que si se hizo esto:

def __init__(self, region, srcPos, pos): 
    self.region = region 
    self.cells = [] 
    for i in xrange(region.cellsPerCol): 
     self.cells.append(Cell(self, i)) 

Esto se llama un list comprehension.

Cuestiones relacionadas