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

时间:2020-09-29 13:37:07

标签: python iterator yield

我正在将迭代器传递给函数,并比较迭代器中的上一个/当前/下一个项目。

下面的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

如何评估该程序的后两个元素的逻辑,以便获得预期的结果?

此致

1 个答案:

答案 0 :(得分:0)

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
相关问题