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

Python合并列表连续整数项时遇索引越界问题求解决方案

解决计算器输入列表连续整数合并的索引越界问题

你的代码出现索引越界,主要有两个原因:

  1. 当遍历到列表最后一个元素时,index+1会超出列表的最大索引范围;
  2. 使用enumerate遍历的同时修改列表(执行pop),会导致后续遍历的索引和实际列表长度不匹配,引发更多潜在问题。

这里提供两种可靠的解决方法:

方法一:反向遍历列表

从后往前遍历,即使删除元素也不会影响前面未处理的索引,同时避免index+1越界:

calc_list = [3, 4, "-", 7, "+", 9, "/", 2]
# 从倒数第二个元素开始,向前遍历到第一个元素
for index in range(len(calc_list)-2, -1, -1):
    current = calc_list[index]
    next_item = calc_list[index+1]
    # 用isinstance比type更灵活,支持整数子类场景
    if isinstance(current, int) and isinstance(next_item, int):
        calc_list[index] = int(str(current) + str(next_item))
        calc_list.pop(index+1)

print(calc_list)  # 输出:[34, '-', 7, '+', 9, '/', 2]

方法二:创建新列表处理(推荐)

不修改原列表,而是构建新列表来合并连续整数,逻辑更清晰,也不会有索引问题:

calc_list = [3, 4, "-", 7, "+", 9, "/", 2]
new_list = []
current_num = None

for item in calc_list:
    if isinstance(item, int):
        if current_num is None:
            current_num = item
        else:
            # 合并连续整数,支持多个连续数字(比如[1,2,3]会合并成123)
            current_num = int(str(current_num) + str(item))
    else:
        # 遇到运算符,先把之前合并好的数字加入新列表
        if current_num is not None:
            new_list.append(current_num)
            current_num = None
        new_list.append(item)
# 处理最后剩下的数字
if current_num is not None:
    new_list.append(current_num)

print(new_list)  # 输出:[34, '-', 7, '+', 9, '/', 2]

另外注意:尽量用isinstance(item, int)替代type(item) is int,前者能兼容整数的子类情况,适用性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:50:21