如何在Python生成列表相邻元素对时避免IndexError索引越界?
解决列表索引越界问题的几种方法
你的代码触发IndexError是因为循环遍历了列表的所有元素,当处理最后一个元素时,idx+1超出了列表的最大索引范围(原列表长度为7,索引从0到6,idx=6时idx+1=7不存在)。以下几种方法可以提前终止循环或避免索引越界:
方法1:遍历到倒数第二个元素
通过切片list[:-1]只取列表的前n-1个元素(n为列表长度),循环不会处理最后一个元素,自然不会出现idx+1越界的情况:
my_list = [6, 63, 131, 182, 507, 659, 669] for idx, i in enumerate(my_list[:-1]): print(i + 1, my_list[idx + 1])
方法2:循环内判断终止条件
在循环中检查当前索引是否为最后一个,若是则主动终止循环:
my_list = [6, 63, 131, 182, 507, 659, 669] for idx, i in enumerate(my_list): if idx == len(my_list) - 1: break print(i + 1, my_list[idx + 1])
方法3:用zip配对元素(更Pythonic)
直接将原列表和原列表的切片[1:]配对,zip会自动在较短的序列结束时停止循环,无需手动处理索引:
my_list = [6, 63, 131, 182, 507, 659, 669] for a, b in zip(my_list, my_list[1:]): print(a + 1, b)
如果需要直接生成目标元素对列表,可用列表推导式:
my_list = [6, 63, 131, 182, 507, 659, 669] result = [(a + 1, b) for a, b in zip(my_list, my_list[1:])] print(result) # 输出: [(7,63),(64,131),(132,182),(183,507),(508,659),(660,669)]
内容的提问来源于stack exchange,提问作者Lee Whieldon
相关产品推荐
相关产品推荐

