【问题标题】:What does a for loop within a list do in Python?Python 中列表中的 for 循环有什么作用?
【发布时间】:2012-07-13 19:55:07
【问题描述】:

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

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.

【问题讨论】:

  • 它被称为“列表理解”

标签: python loops


【解决方案1】:

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

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

解释

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

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

例如:

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]

【讨论】:

    【解决方案2】:

    就像你这样做一样:

    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

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 2020-08-07
      • 1970-01-01
      • 2014-02-22
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2021-06-04
      相关资源
      最近更新 更多