如何使用上一个/当前/下一个从列表中获取唯一值?

问题描述

我实现了一个程序,该程序接受一个列表,并根据上一个,当前和下一个元素返回唯一值。

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

例如:[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,1,2]
    
    for u in test(l):
        print(u)

如果next_itemNone,则循环终止。如果prevIoUs_item不等于prevIoUs_item,我只会产生current_item。如果prevIoUs_item不等于prevIoUs_item,我也只移动current_item“指针”。 prevIoUs_item总是保证有一个值,所以我很困惑为什么[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