列表中的for循环在Python中有什么作用?

时间:2012-07-13 22:56:46

标签: python loops

有人可以向我解释这段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.

2 个答案:

答案 0 :(得分:46)

您要问的代码行使用list comprehension创建列表,并将此列表中收集的数据分配给self.cells。它相当于

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

<强> 解释

为了最好地解释 的工作方式,一些简单的示例可能有助于您理解您拥有的代码。如果您要继续使用Python代码,您将再次遇到列表理解,并且您可能希望自己使用它。

请注意,在下面的示例中,两个代码段都是等效,因为它们会创建存储在列表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]

答案 1 :(得分:1)

就像你这样做一样:

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

这称为list comprehension