Python合并列表连续整数项时遇索引越界问题求解决方案
解决计算器输入列表连续整数合并的索引越界问题
你的代码出现索引越界,主要有两个原因:
- 当遍历到列表最后一个元素时,
index+1会超出列表的最大索引范围; - 使用
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
相关产品推荐
相关产品推荐

