这种压缩成一行的嵌套 for 循环是什么意思?-蟒



我正在阅读一些Python代码,并遇到了以下生成二维数组的行。

self.slots = [[Slot(self.world,i,j) for j in range(NUMROWS)] for i in range(NUMCOLS)]

我的问题是:

1)这种符号也称为"生成器"吗?

2)你如何解释这句话在英语中的含义?即"创建大小NUMROWS Slot对象的数组"等。

3)创造的顺序是什么?是先创建NUMROWS数组,然后再创建NUMCOLS数组吗?

本质上,

[[Slot(self.world,i,j) for j in range(NUMROWS)] for i in range(NUMCOLS)]

与以下相同:

slots = []
for i in range(NUMCOLS):
  column = []
  for j in range(NUMROWS):
    row = Slot(self.world, i, j)
    column.append(row)
  slots.append(column)

它被称为list comprehension,见 http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

例如:

>>> x, y = 2,3
>>> [[(i,j) for j in range(y)] for i in range(x)]
[[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)]]

最新更新