首页 > 解决方案 > 为什么“list.append(str(d) for d in devices)”只返回一个生成器而不填充列表?

问题描述

我有一个对象列表,我想创建另一个字符串列表。如果我以这种方式运行附加功能:

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

list_new元素将是:

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

为什么会出现这种行为?

标签: python-3.xlist

解决方案


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]

推荐阅读