如何基于DataFrame中列表相邻元素值添加元素?解决索引越界问题
解决列表遍历索引越界问题并生成目标列表
给定列表:
oddnum = [1, 3, 5, 7, 9, 11, 23]
需要生成目标列表:
newlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23]
规则如下:
- 若相邻元素差值为2,在两者之间插入
当前元素+1 - 若差值大于2,保留原元素
你遇到的索引越界错误,是因为遍历到列表最后一个元素时,index+1超出了列表的最大索引范围。以下是两种可行的解决方法:
方法一:控制遍历范围到倒数第二个元素
oddnum = [1, 3, 5, 7, 9, 11, 23] newlist = [] # 遍历索引从0到倒数第二个元素(len(oddnum)-2) for i in range(len(oddnum) - 1): current = oddnum[i] next_num = oddnum[i+1] # 先加入当前元素 newlist.append(current) # 判断是否需要插入中间数 if next_num - current == 2: newlist.append(current + 1) # 最后单独加入列表的最后一个元素 newlist.append(oddnum[-1]) print(newlist)
逻辑说明:
- 遍历范围设为
range(len(oddnum)-1),确保i+1始终是有效的列表索引 - 每一步先将当前元素加入新列表,再根据差值判断是否插入中间数
- 最后手动添加最后一个元素,避免遗漏
方法二:用zip配对相邻元素
oddnum = [1, 3, 5, 7, 9, 11, 23] newlist = [] # zip会将原列表和原列表切片(从第二个元素开始)配对 for current, next_num in zip(oddnum, oddnum[1:]): newlist.append(current) if next_num - current == 2: newlist.append(current + 1) # 加入最后一个元素 newlist.append(oddnum[-1]) print(newlist)
逻辑说明:
oddnum[1:]是原列表去掉第一个元素后的新列表,和原列表zip后,会自动生成(oddnum[0], oddnum[1]), (oddnum[1], oddnum[2]), ..., (oddnum[-2], oddnum[-1])的配对- 这种方式不需要手动处理索引,从根源上避免了索引越界问题
内容的提问来源于stack exchange,提问作者user15141497
相关产品推荐
相关产品推荐

