python - 为什么对 zip() 调用的列表理解会返回一个包含 zip 对象的列表,而不是 zip() 的返回值列表?
问题描述
使用 python3 REPL 并注意到以下内容:
为什么print( [zip([1,2,3], [3,1,4])] )
和print( list(zip([1,2,3], [3,1,4])) )
不同?
第一个返回[<zip object at 0xblah>]
,第二个返回[(1,3), (2,1), (3,4)]
。
试图理解为什么第一个语句中的列表理解没有给我list()
构造函数给出的结果 - 我想我对列表理解之间的区别感到困惑,list()
并且希望深入了解引擎盖下发生的事情。
搜索给了我这个关于列表和元组的问题,它没有回答我的问题。
编辑:关于Python 3 中的 zip() 函数的建议问题是非常有用的背景,但没有解决我的问题中关于列表理解和列表文字之间区别的混淆,所以我更喜欢下面提交的答案更完整.
解决方案
第一条语句不是列表推导,列表推导会给您相同的结果。它只是一个包含 zip 对象的列表文字:
这将是一个列表理解:
[value for value in zip([1,2,3], [3,1,4])]
以上将打印与list(zip([1, 2, 3], [3, 1, 4]))
.
一般来说,[something]
意味着:一个包含一个元素的列表:something
.
另一方面,list(something)
意味着:迭代某事物中的值,并从结果中创建一个列表。例如,您可以通过将原始对象放入其中来查看差异,例如数字:
>>> [2]
[2]
>>> list(2)
TypeError: 'int' object is not iterable
推荐阅读
- java - 获取 IgniteCheckedException:在单个节点上启用持久性时,默认 Ignite 实例已启动异常
- javascript - 如何使 v-btn 在单击时不启动路由但仍根据路由显示活动状态?
- javascript - 如何使用 javascript 或 jquery 将参数值设置为“onClick”函数
- tableau-api - 箱形图错误 - 箱形部分未突出显示且数据不太合理 - Tableau
- docker - 为什么我的 alpine linux docker 应用程序不允许直接连接到套接字?
- sparql - 如何在另一个 sparql 查询中进行 sparql 查询?
- apache-flink - Flink Optimizer 如何决定并行度?
- android - Firebase MLKit 条形码扫描仪:添加支持的格式
- omnet++ - handleMessage(): Unknown protocol: id = 47, name = udp -- 在网络初始化期间的模块 (inet::MessageDispatcher)
- javascript - 如何检查 html 元素是否包含我在 JavaScript 中指定的每个类