31

有人可以向我解释这个 Python 代码片段的最后一行吗?

Cell只是另一个类。我不明白如何使用for循环将Cell对象存储到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.
4

2 回答 2

76

您询问的代码行是使用列表推导来创建一个列表并将该列表中收集的数据分配给self.cells. 它相当于

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

说明

为了最好地解释它是如何工作的,一些简单的例子可能有助于你理解你拥有的代码。如果您要继续使用 Python 代码,您将再次遇到列表推导,您可能想自己使用它。

请注意,在下面的示例中,两个代码段是等效的,因为它们创建了一个list存储在 list 中的值myList

例如:

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

相当于

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

列表推导也可以更复杂,例如,如果您有一些条件确定值是否应该进入列表,您也可以使用列表推导来表达这一点。

此示例仅收集列表中的偶数值:

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

和等效的列表理解:

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

最后的两个注意事项:

  • 您可以有“嵌套”列表理解,但它们很快就会变得难以理解:)
  • 列表推导将比等效的 for 循环运行得更快,因此通常是关注效率的普通 Python 程序员的最爱。

好的,最后一个示例显示您还可以将函数应用于您在列表中迭代的项目。这使用float()将字符串列表转换为浮点值:

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

给出:

new_data
[3.0, 7.4, 8.2]
于 2012-07-13T23:00:07.360 回答
1

就像你这样做一样:

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

这称为列表推导

于 2012-07-13T22:59:11.987 回答