Python遍历列表时末尾莫名新增元素的问题排查
问题原因及解决方案
核心问题:list.index()的行为 + 循环逻辑错误
你的代码出现异常输出的根源有两个:
numberlist.index(i)只会返回第一个匹配元素的索引
比如原列表[1,4,7,5,6,2,4],最后一次循环的i是末尾的4,但index(4)找的是列表里第一个4的位置(索引1),不是当前这个4的实际位置(索引6)。这时候next = 1+1=2,取numberlist[2]得到7,所以多输出了[4,7]。
当列表最后是6时,index(6)返回第一个6的索引4,next=5,numberlist[5]是2,所以输出[6,2];而如果最后是3,因为列表里只有最后一个3,index(3)返回7,next=8超出列表索引范围(列表长度8,索引仅到7),所以触发IndexError。- 循环遍历所有元素的逻辑错误
你需要的是“每个元素和下一个元素配对”,但直接for i in numberlist会遍历到最后一个元素,而最后一个元素本就没有下一个元素。只有当最后一个元素是列表里唯一的元素时,才会触发索引错误;如果是重复元素,就会因为index()的特性输出错误的配对。
正确实现方式
要实现需求,应该通过索引遍历或者用zip函数来配对元素:
方式1:遍历索引范围
numberlist = [1, 4, 7, 5, 6, 2, 4] # 只遍历到倒数第二个元素的索引,确保能取到下一个元素 for pos in range(len(numberlist)-1): ordering = [numberlist[pos], numberlist[pos+1]] print(ordering)
方式2:用zip函数(更简洁)
numberlist = [1, 4, 7, 5, 6, 2, 4] # 将原列表和它的切片(从第二个元素开始)配对 for current, next_item in zip(numberlist, numberlist[1:]): print([current, next_item])
两种方式都会输出正确结果:
[1, 4] [4, 7] [7, 5] [5, 6] [6, 2] [2, 4]
内容的提问来源于stack exchange,提问作者santi
相关产品推荐
相关产品推荐

