为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2023-09-26 14:14:19
我已经实现了一个程序,它接受一个列表,并根据前一个、当前和下一个元素返回唯一值。但是,当列表开头有两个以上相同元素时,该程序将不起作用。前任:[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_item如果是,则循环终止None。我只产生一个previous_itemif previous_itemis not equal to current_item。如果不等于,我也只移动previous_item“指针” 。总是保证有一个值,所以我很困惑为什么诸如此类的输入不会产生任何结果。previous_itemcurrent_itemprevious_item[0, 0, 0, 1]
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

你的 while 循环正在测试是否next_item不为 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


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信