如何使用 previous/current/next 从列表中获取唯一值?

How to get unique values from list using previous/current/next?

我实现了一个程序,它接受一个列表,returns 基于前一个、当前和下一个元素的唯一值。

但是,当列表的开头有两个以上的相同元素时,该程序将无法运行。

例如:[0, 0, 0, 1]

这是代码,后面是机制说明。

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

        else:
            yield previous_item
            previous_item = current_item
            current_item = next_item

        
    if previous_item:
        yield previous_item


        
if __name__ == "__main__":
    
    l = [0, 0, 1, 2]
    
    for u in test(l):
        print(u)

如果 next_itemNone,则循环终止。如果 previous_item 不等于 current_item,我只会生成 previous_item。如果 previous_item 不等于 current_item,我也只移动 previous_item“指针”。 previous_item 总是保证有一个值,所以我很困惑为什么像 [0, 0, 0, 1] 这样的输入不会产生任何东西。

此致,

您的 while 循环正在测试 next_item 是否为 not null,意思是不等于 0None[]{} , 等等... 所以一旦取值为0,循环就停止了。

相反你可以这样做:

def test(current):
    
    iterator = iter(current)
    previous_item = next(iterator)
    current_item = next(iterator)
    next_item = 0
    
    
    while next_item is not None:
        
        try:
            next_item = next(iterator)       
        except StopIteration:
            next_item = None      
        
        if previous_item == current_item:
            current_item = next_item

        else:
            yield previous_item
            previous_item = current_item
            current_item = next_item

        
    if previous_item:
        yield previous_item