我在遍历列表并附加到其他列表时获取生成器对象。
>>> a=[1,2,3,4]
>>> b=[6,7,8,9]
>>> c=None
>>> c=(i for i in a)
>>> c
<generator object <genexpr> at 0x1070baaa0>
>>> c.append(i for i in b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'generator' object has no attribute 'append'
如何将值从一个列表添加到另一个现有列表?
答案 0 :(得分:1)
您需要将生成器表达式包装在方括号中以将其转换为列表:
c=[i for i in a]
那就是说,当你可以使用
时,这是一个冗余生成器c = a + b
因为您没有更改或评估列表中的任何元素,并且连接会创建一个新列表。
答案 1 :(得分:1)
两个问题: A)您要将生成器与列表混合使用 B)您希望使用列表方法extend()
而不是append()
}。
当您写下:a = [1, 2, 3, 4]
时,您正在创建一个列表,并将其称为a
。
当您写下:c = (i for i in a)
时,您正在创建一个生成器并将其称为c
。
如果您想将a
追加到c
,首先必须将c
转换为列表。这可以通过以下两种方式完成:
从头开始制作一个列表:
c = [i for i in a]
将返回包含a
中所有元素的列表。这称为列表理解。
将生成器转换为列表:
c = (i for i in a)
c = list(c)
既然c
是一个列表,您可以将b
附加到其中:
c.append(b)
[1, 2, 3, 4, [6, 7, 8, 9]]
c
的第5个元素是另一个列表。
extend()
代替append()
您真正想要的是使用列表的extend方法。此方法将iterable中的所有元素追加到调用方法的iterable中。
c = [1, 2, 3, 4]
b = [6, 7, 8, 9]
c.extend(b)
[1, 2, 3, 4, 6, 7, 8, 9]
[====c=====] [====b====]
此外,如果您只想创建包含两个先前列表元素的新列表,则可以执行以下操作:
list1 = ['a', 'b', 'c']
list2 = ['x', 'y', 'z']
list3 = list1 + list2
OR
list1 = ['a', 'b', 'c']
list2 = ['x', 'y', 'z']
list3 = [i for i in list1] + [j for j in list2]
练习列表推导