gpt4 book ai didi

python - 在 Python 中为字符串实现先行迭代器

转载 作者:太空狗 更新时间:2023-10-29 21:13:40 24 4
gpt4 key购买 nike

我正在做一些需要先行标记的解析。我想要的是一个快速函数(或类?),它将采用迭代器并将其转换为形式为( token ,先行)的元组列表,这样:

>>> a = ['a', 'b', 'c', 'd']
>>> list(lookahead(a))
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', None)]

基本上,这对于像这样在迭代器中向前看会很方便:

for (token, lookahead_1) in lookahead(a):
pass

不过,我不确定 itertools 中是否已经为这项技术或函数命名,它已经可以执行此操作。有什么想法吗?

谢谢!

最佳答案

如果您只是使用列表,则有更简单的方法 - 请参阅 Sven 的回答。这是对通用迭代器执行此操作的一种方法

>>> from itertools import tee, izip_longest
>>> a = ['a', 'b', 'c', 'd']
>>> it1, it2 = tee(iter(a))
>>> next(it2) # discard this first value
'a'
>>> [(x,y) for x,y in izip_longest(it1, it2)]
# or just list(izip_longest(it1, it2))
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', None)]

这里是如何在你的问题中的 for 循环中使用它。

>>> it1,it2 = tee(iter(a))
>>> next(it2)
'a'
>>> for (token, lookahead_1) in izip_longest(it1,it2):
... print token, lookahead_1
...
a b
b c
c d
d None

最后,这是您正在寻找的功能

>>> def lookahead(it):
... it1, it2 = tee(iter(it))
... next(it2)
... return izip_longest(it1, it2)
...
>>> for (token, lookahead_1) in lookahead(a):
... print token, lookahead_1
...
a b
b c
c d
d None

关于python - 在 Python 中为字符串实现先行迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448117/

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