列表中的python生成器无法使用它

时间:2015-11-24 12:02:26

标签: python

我创建了一个这样的列表:

z=[5,4]

我需要将此列表值分配给另一个列表,并将z list的元素设置为该列表的第一个元素,所以我这样做:

other.append([i,0,'tweak'] for i in z)

但它会产生类似的东西:

[<generator object <genexpr> at 0x024B7F30>, <generator object <genexpr> at 0x02562288>]

我无法在此表单中使用我的其他列表!

我希望我的其他列表看起来像:

[[5,0,'tweak'][4,0,'tweak']]

4 个答案:

答案 0 :(得分:4)

[i,0,'tweak'] for i in z是一个生成器表达式。没有声明显式的可迭代类型(列表用方括号[l1, l2]表示) - 解释器检测到它并创建按需计算值的对象 - 生成器。

如果要创建列表,则必须明确声明。

other.append([[i,0,'tweak'] for i in z])  # appends list, not generator

答案 1 :(得分:3)

备注:

  • [i,0,'tweak'] for i in z创建了一个生成器函数而不是List Comprehension来转换它,您可以添加括号i.e. [[i,0,'tweak'] for i in z]
  • 当第一个问题得到纠正时,我们遇到了第二个问题[[i,0,'tweak'] for i in z]创建了lists of list [[LOL]],当您追加到列表中时,它变为lists of lists of list [[[LOLOL]]]以避免您使用append

你可以这样做

<强>代码:

z=[5,4]
other=[]
other.extend([[i,0,'tweak'] for i in z])
print other

答案 2 :(得分:2)

这个?

z=[5,4]
other = [] # or some list
other += [[i,0,'tweak'] for i in z]

答案 3 :(得分:2)

你不应该在这里使用append,因为你想直接构建你的列表。只需使用列表理解:

other = [[i,0,'tweak'] for i in z]