我有一个对象列表,我想创建另一个字符串列表。 如果我以这种方式运行append函数:
list_new.append(str(d) for d in devices)
list_new
元素将是:
[<generator object <genexpr> at 0x0000018F0E9DFF48>]
为什么这样?
答案 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]