列表元素两两对比求左侧较小值时遇索引越界问题求助
解决列表索引越界问题:获取每个元素的左侧较小值
你遇到的「list index out of range」错误很好排查——当你的while循环运行到最后一次迭代时,i等于len(lio)-1(也就是列表最后一个元素的索引),这时候你尝试访问lio[i+1],但列表的最大索引就是len(lio)-1,自然就会触发索引越界的问题。
另外看你的判断条件lio[i] < (lio[i + 1]) - 1,这和你描述的需求不太匹配——你说对比1和34时,1小于34就添加,但这个条件会变成1 < 34-1(也就是1<33),虽然这次成立,但如果遇到相邻元素是34和35的情况,34 < 35-1就会变成34<34,结果不成立,不符合你要的“左侧元素小于右侧就添加”的逻辑,这个多余的-1应该去掉。
下面是修正后的代码,用while循环实现的版本:
lio = [1,34,56,78,97,889] i = 0 liu = [] # 循环终止条件改为i < len(lio)-1,只遍历到倒数第二个元素 while i < len(lio) - 1: if lio[i] < lio[i + 1]: liu.append(lio[i]) i += 1 print(liu)
如果你更习惯用for循环,这个写法会更简洁:
lio = [1,34,56,78,97,889] liu = [] # range(len(lio)-1)会生成0到4的索引,刚好对应前5个元素,每个都能和下一个元素对比 for i in range(len(lio)-1): if lio[i] < lio[i+1]: liu.append(lio[i]) print(liu)
运行这两段代码都会输出[1, 34, 56, 78, 97],完全符合你描述的需求:遍历每一对相邻元素,把左侧较小的那个元素加入新列表,同时彻底解决了索引越界的问题。
内容的提问来源于stack exchange,提问作者RohitM
相关产品推荐
相关产品推荐

