python - 带有压缩迭代器的 itertools.chain
问题描述
我有 3 台发电机如下
g1 = ((i, i) for i in range(3))
g2 = ((i, i ** 2) for i in range(3))
g3 = ((i, i ** 3) for i in range(3))
我想将它们链接在一起(并行)以获得类似(i,i,i,i 2,i,i 3)的输出。以下是 2 个代码,一个有效,另一个无效。谁能帮我理解为什么第二种方法不能按计划工作?我不太完全理解 Python 在压缩迭代器时会做什么。
这是有效的代码:
from itertools import chain
def combo(iters):
zipped_tuples = zip(*iters)
for zipped_tuple in zipped_tuples:
yield tuple(chain.from_iterable(zipped_tuple))
c = combo((g1, g2, g3))
for item in c:
print(item)
输出如下
(0, 0, 0, 0, 0, 0)
(1, 1, 1, 1, 1, 1)
(2, 2, 2, 4, 2, 8)
这是不起作用的代码
from itertools import chain
g1 = ((i, i) for i in range(3))
g2 = ((i, i ** 2) for i in range(3))
g3 = ((i, i ** 3) for i in range(3))
def combo(iters):
zipped_tuples = chain.from_iterable(zip(*iters))
yield from zipped_tuples
c = combo((g1, g2, g3))
for item in c:
print(item)
输出不是并行链接,而是串行链接,如下所示:
(0, 0)
(0, 0)
(0, 0)
(1, 1)
(1, 1)
(1, 1)
(2, 2)
(2, 4)
(2, 8)
解决方案
推荐阅读
- php - 避免使用 PHP 进行 URL 转换
- json - Firebase 托管重定向除一个文件之外的所有内容
- apache-kafka - 使用应用程序重置工具时,Kafka 状态存储会发生什么情况?
- python - Jupiter Notebook 无法封装folium
- react-native - 当使用 Mocha 单元 React-native 测试文件时,它给出了错误的意外提示
- javascript - DOM 事件在没有箭头功能的情况下不起作用
- javascript - ReactJS randomly Unexpected token '<'
- html - 寻找对html表单动作属性的更深入理解
- netsuite - http.get 和 http.post 通过预定脚本 Netsuite 中的错误 - 错误:在对象中找不到函数 post
- python - 我如何使用熊猫导出每行图像