python - 仅使用 itertools 重复迭代中的每个元素(可以是无限的)
问题描述
以下是否有更简单的表达式,可以使用itertools
而不需要定义函数?
它必须支持任何可迭代的,包括来自生成器的无限序列。
我查看了https://docs.python.org/3/library/itertools.html中的食谱,并没有发现任何明显的东西。
def repeat_each(iterable, n):
"""Repeat each element in iterable n times"""
it = iter(iterable)
for element in it:
for _ in range(n):
yield element
a = itertools.cycle('abcd')
b = repeat_each(a, 4)
print(''.join(itertools.islice(b, 30)))
# Output: 'aaaabbbbccccddddaaaabbbbccccdd'
解决方案
我不确定它是否涵盖了您想到的所有情况,但是您可以使用tee
(复制迭代器n
时间)然后zip
它chain
:
from itertools import tee, chain, cycle, islice
a = cycle('abcd')
b = chain.from_iterable(zip(*tee(a, 4)))
print(''.join(islice(b, 30)))
结果:
aaaabbbbccccddddaaaabbbbccccdd
推荐阅读
- c# - 如何转换表达式
> 到表达式 >? - android - xamarin Android:想要以编程方式在导航视图菜单项中创建组
- excel - Excel左右子串
- java - 懒惰地与供应商创建 java 流
- java - 地图之间的Java差异,包括值
- c# - 如何使用 WPF 的 famfamfam 标志图标获取特定的图标标志?
- android-emulator - 为什么关闭 Android 模拟器会挂起我的电脑
- python - TensorFlow 和词嵌入:传递字典
- java - Android在活动中制作滚动的两个独立列表视图
- caching - 致命错误:未捕获的错误:在 Prestashop 中找不到类“缓存”