产生迭代器的部分时如何检查相等性?

How to check for equality when yielding parts of an iterator?

我正在将迭代器传递给函数,并比较迭代器中的 previous/current/next 个项目。

下面的 MRE 显示当最后两个元素相同时,我无法检查 previous_item 是否等于 current_item

def test(current):

    iterator = iter(current)
    previous_item = None
    current_item = next(iterator)
    flag = 'none'
    
    for next_item in iterator:
        
        if previous_item == current_item:
            flag = 'here'
            yield previous_item, current_item, next_item, flag

        else:
            flag = 'none'
            yield previous_item, current_item, next_item, flag

        previous_item = current_item
        current_item = next_item
        

    yield (previous_item, current_item, None, flag)
if __name__ == "__main__":

    l = [0, 1, 2, 3, 3]
    for prev, curr, nex, flag in test(l): 
        print(prev, curr, nex, flag)

实际输出:

None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None none

预期输出:

None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None here

我如何评估这个程序的最后两个元素的逻辑,以便得到我预期的结果?

此致,

def test(current):
    iterator = iter(current)
    previous_item = None
    current_item = next(iterator)
    flag = 'none'
    next_item = True
    
    while next_item:
        try:
            next_item = next(iterator)
        except StopIteration:
            next_item = None

        if previous_item == current_item:
            flag = 'here'
            yield previous_item, current_item, next_item, flag
        else:
            flag = 'none'
            yield previous_item, current_item, next_item, flag

        previous_item = current_item
        current_item = next_item
    
    if current_item:
        yield (previous_item, current_item, next_item, flag)

if __name__ == "__main__":
    l = [0, 1, 2, 3, 3]
    for prev, curr, nex, flag in test(l): 
        print(prev, curr, nex, flag)

输出

None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None here