gpt4 book ai didi

python - 来自 itertools 食谱的成对总是给出与 zip(a, a[1 :])?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:01 25 4
gpt4 key购买 nike

很长一段时间我都使用 itertools 食谱中的成对函数。 ( https://docs.python.org/3.4/library/itertools.html#itertools-recipes )

def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)

但这不是总是给出与 zip(iterable, iterable[1:]) 相同的结果吗?

最佳答案

zip(iterable, iterable[1:]) 只适用于可以切片的东西。 pairwise 适用于任意可迭代对象。

为了演示,这是斐波那契数列的典型函数式无限列表(此处为生成器)的极其复杂的版本:

from itertools import tee


def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)


def cons(x, xs):
yield x
yield from xs


def take(count, l):
it = iter(l)

for i in range(count):
yield next(it)


def lazy_yield_from(get_iterable):
yield from get_iterable()


infinite_fibonacci, _if = tee(
cons(1, cons(1, lazy_yield_from(lambda: (a + b for a, b in pairwise(_if))))))

print(list(take(5, infinite_fibonacci)))

关于python - 来自 itertools 食谱的成对总是给出与 zip(a, a[1 :])?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com