我有一个名为'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]
答案 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个零的列表。