You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中列表索引越界问题:如何用range()捕获列表最后一个元素?

问题描述

我想要使用range函数遍历一个数字列表,以生成一个新列表,其中原列表中的每个偶数都要翻倍。但无论如何尝试,我都无法捕获列表的最后一个元素。我的原始代码如下:

my_list = [1, 2, 3, 4]

encoded_list = []

odd = 0
even = 1

for position in range(0, len(my_list) - 1):
    if my_list[position] == my_list[odd]:
        number = my_list[odd]       
        encoded_list = encoded_list + [number]
        odd = odd + 2
    elif my_list[position] == my_list[even]:
        number = my_list[even] + 2
        encoded_list = encoded_list + [number]
        even = even + 2
        
print(encoded_list)

输出:

[1, 4, 3]

目前我尝试将range(0, len(my_list) - 1)替换为range(len(my_list))和range(0, 3),但都会返回错误信息IndexError: list index out of range。请问有没有办法使用range()函数解决这个问题?

问题分析

你的核心问题在于维护odd和even索引变量的逻辑完全错误:

  • 用my_list[position] == my_list[odd]判断当前元素是奇数位元素毫无意义,当列表存在重复元素时逻辑会直接混乱;且每次循环后强制让odd和even加2,很快就会超出列表索引范围,触发IndexError。
  • 原代码的range(0, len(my_list)-1)刻意跳过了最后一个元素,这就是无法捕获最后一个元素的直接原因。
解决方案

完全不需要额外维护odd和even变量,直接用range(len(my_list))遍历每个元素的索引,判断元素本身的奇偶性即可:

my_list = [1, 2, 3, 4]
encoded_list = []

for position in range(len(my_list)):
    num = my_list[position]
    if num % 2 == 0:
        # 偶数翻倍
        encoded_list.append(num * 2)
    else:
        # 奇数直接保留
        encoded_list.append(num)

print(encoded_list)

输出结果:

[1, 4, 3, 8]

如果想要更简洁的写法,也可以用列表推导式结合range:

my_list = [1, 2, 3, 4]
# 直接遍历元素的写法(本质和用range遍历索引等价)
encoded_list = [num * 2 if num % 2 == 0 else num for num in my_list]
# 或者用range遍历索引的写法:
# encoded_list = [my_list[i] * 2 if my_list[i] % 2 == 0 else my_list[i] for i in range(len(my_list))]
print(encoded_list)

内容的提问来源于stack exchange,提问作者John Gibbonsp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:12:34