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

Pho*_*nix 2 python list generator python-3.x

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

['Company Name', 'Rep', Mth 1 Calls, Mth 1 Inv Totals, Mth 1 Inv Vol, Mth 2 
Run Code Online (Sandbox Code Playgroud)

...等等

在下面的代码中,我只需附加一个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]
Run Code Online (Sandbox Code Playgroud)

Cod*_*all 10

实际上,你不附加38 0的列表:你附加一个将产生 38次的生成器.这不是你想要的.但是,您可以更改为可以更改为 0mb.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.
Run Code Online (Sandbox Code Playgroud)

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

mb.append([0] * 38)
Run Code Online (Sandbox Code Playgroud)

  • 或者`mb.extend([0]*38)`,但这会解决OP的问题吗? (2认同)

Joh*_*nck 5

你应该这样做:

mb.extend([0]*38)
Run Code Online (Sandbox Code Playgroud)

这样你就会附加38个零,而不是附加一个由range()(在Python 2中给出一个列表的nb)给出的单个生成器表达式.

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