python-3.x - 为什么“list.append(str(d) for d in devices)”只返回一个生成器而不填充列表?
问题描述
我有一个对象列表,我想创建另一个字符串列表。如果我以这种方式运行附加功能:
list_new.append(str(d) for d in devices)
list_new
元素将是:
[<generator object <genexpr> at 0x0000018F0E9DFF48>]
为什么会出现这种行为?
解决方案
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]
推荐阅读
- java - 防止测试使用特定的弹簧配置文件运行
- javascript - 如果数据为特定大小,则在图例项的鼠标悬停时模糊/突出显示状态不会改变
- flutter - 在颤动中从另一个小部件更新小部件的状态
- recaptcha - reCaptcha V2 - 即使未勾选复选框,提交也有效
- java - 根据值调用正确的子类
- python - 是否可以将 QML 表视图连接到 python QAbstractModel 实例?
- push-notification - 华为PUSH套件旧令牌问题
- c# - 需要帮助从起始数字中拆分单个数字,然后分配给整数
- bitnami - logrotate UID 不在 passwd 文件中?
- windows - 我尝试使用 netcat 连接我在同一网络中的两台设备。但是我遇到了一些问题,它说网络无法访问