在迭代器上进行"N-wise"迭代是一种常见的需求,它可以帮助我们在处理数据时以固定大小的窗口进行操作。下面是一种高效的方法来实现这个功能:
itertools.islice
函数来获取迭代器的下一个n个元素。itertools.chain
函数将剩余的元素与一个空迭代器连接起来,以确保生成器返回的结果具有固定的大小。yield
语句将获取的元素作为生成器的输出。下面是一个示例代码:
import itertools
def nwise(iterable, n):
it = iter(iterable)
while True:
window = list(itertools.islice(it, n))
if len(window) < n:
yield from itertools.chain(window, itertools.repeat(None, n - len(window)))
break
yield window
# 示例用法
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for window in nwise(data, 3):
print(window)
输出结果为:
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
这个方法可以高效地在迭代器上进行"N-wise"迭代,无论输入的迭代器有多大,都可以保证输出的窗口大小固定为n。这在处理时间序列数据、滑动窗口计算等场景中非常有用。
腾讯云相关产品和产品介绍链接地址:
腾讯自动驾驶系列公开课
云+社区沙龙online [新技术实践]
腾讯云GAME-TECH游戏开发者技术沙龙
T-Day
serverless days
腾讯云GAME-TECH游戏开发者技术沙龙
领取专属 10元无门槛券
手把手带您无忧上云