有人可以向我解释这段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.
答案 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]
最后两个笔记:
好的,最后一个示例显示您还可以将函数应用于您在列表中迭代的项目。这使用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))