python是否有任何内置或标准库前瞻机制用于迭代器?

问题描述 投票:0回答:1

原则上,为迭代器编写一个包装器是很容易的,它允许任意前瞻,并且有一些问题专门用于此(例如Using lookahead with generators)。

但是,鉴于几乎所有非平凡的文件解析都会从这样的设施中获益,对标准库来说似乎太明显了;是否真的没有内置或标准库机制,这将允许偷看?

具体来说,我通常需要窥视函数调用:子函数应该能够检查任意数量的即将到来的元素,而不是从迭代器中删除它们 - 本质上是一个队列数据类型,其中元素是从迭代器中懒惰地获取的。

在某些情况下,collections.dequeitertools.tee可用于构建变通方法。但是为了代码可读性,它们是不利的。

python iterator lookahead
1个回答
1
投票

没有。


我经常发现自己使用pairwise Recipe前瞻...

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

for item, peek in pairwise(iterable):
    ...

或者简单地将您的iterable转换为Sequence(如果它还没有)并使用索引查找。

for index, item in enumerate(sequence):
    try:
        peek = sequence[index+1]
    except IndexError:
        peek = None
© www.soinside.com 2019 - 2024. All rights reserved.