为什么“ list.append(设备中d的str(d))”仅返回生成器而不填充列表?

时间:2019-12-03 15:22:23

标签: python-3.x list

我有一个对象列表,我想创建另一个字符串列表。 如果我以这种方式运行append函数:

list_new.append(str(d) for d in devices)

list_new元素将是:

[<generator object <genexpr> at 0x0000018F0E9DFF48>]

为什么这样?

1 个答案:

答案 0 :(得分:3)

list_new.append(str(d) for d in devices)

在这种情况下,str(d) for d in devices首先对生成器求值,然后将此生成器附加到列表中。在append中的每个元素上,这里没有调用devices

这可以通过几种不同的方式解决,有些是惯用的,有些则皱眉了。

在这种情况下最好使用extend

list_new.extend(str(d) for d in devices)

这将使用生成器中的每个元素,并将其独立添加到列表中。

下一个最好的事情是适当的循环:

for d in devices:
    list_new.append(str(d))

如果list_new开始为空,则可以使用列表推导:

list_new = [str(d) for d in devices]