Python - 为什么这段代码被认为是生成器?

时间:2013-11-21 14:42:23

标签: python list python-3.x generator

我有一个名为'mb'的列表,其格式为:

['Company Name', 'Rep', Mth 1 Calls, Mth 1 Inv Totals, Mth 1 Inv Vol, Mth 2 

......等等

在下面的代码中,我只需添加一个38 0的新列表。这很好。

然而在下一行我收到一个错误: 'generator'对象不支持项目分配

谁能告诉我: 1)如何纠正这个错误,并且 2)为什么下面的len(mb)-1被认为是发电机。

注意:row [0]只是另一个列表中的“公司名称”。

mb.append(0 for x in range(38))
mb[len(mb)-1][0]=row[0]

2 个答案:

答案 0 :(得分:10)

事实上,你没有附加38 0的列表:你追加一个生成器,它将产生 0 38次。这不是你想要的。但是,您可以更改mb.append(0 for x in range(38))更改为

mb.append([0 for x in range(38)]) 
# note the [] surrounding the original generator expression!  This turns it
# into a list comprehension.

或更简单(感谢@John在评论中指出这一点)

mb.append([0] * 38)

答案 1 :(得分:5)

你应该这样做:

mb.extend([0]*38)

这样你就会附加38个零,而不是附加range()给出的单个生成器表达式(在Python 2中为n.b.代替了列表)。

使用extend而不是append会使列表长38,而不是使其长1,并使1个新元素成为38个零的列表。