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

Q L*_*Liu 22 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.
Run Code Online (Sandbox Code Playgroud)

Lev*_*von 49

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

self.cells = []
for i in xrange(region.cellsPerCol):
    self.cells.append(Cell(self, i))
Run Code Online (Sandbox Code Playgroud)

说明:

为了更好地解释这是如何工作的,一些简单的例子可能对帮助您理解您的代码有所帮助.如果您要继续使用Python代码,您将再次遇到列表理解,并且您可能希望自己使用它.

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

例如:

myList = []
for i in range(10):
    myList.append(i)
Run Code Online (Sandbox Code Playgroud)

相当于

myList = [i for i in range(10)]
Run Code Online (Sandbox Code Playgroud)

列表推导也可能更复杂,例如,如果你有一些条件确定值是否应该进入列表,你也可以用列表理解来表达.

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

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

和等效列表理解:

myList = [i for i in range(10) if i%2 == 0]
Run Code Online (Sandbox Code Playgroud)

最后两个笔记:

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

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

data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]
Run Code Online (Sandbox Code Playgroud)

得到:

new_data
[3.0, 7.4, 8.2]
Run Code Online (Sandbox Code Playgroud)