Python循环中复用修改后数组出现IndexError的原因咨询
为什么会出现IndexError,以及如何实现你的需求
首先,来解释你遇到的IndexError: list index out of range错误:
你一开始获取了初始列表的长度leg = len(l),然后用for i in range(0, leg)来循环。但问题在于,在循环过程中你把l替换成了rv——如果原列表里有奇数元素,rv的长度会比leg小。当循环到i大于新的l(也就是rv)的长度时,自然就会找不到对应的索引,触发错误。比如假设原列表是[4,3],leg是2,循环到i=1时,l已经变成了[2],这时候l[1]根本不存在,就会报错。
另外,你的代码只完成了一次除以2的操作,没有实现“持续除以2直至变为1”的逻辑,也没有收集每一步的处理结果,所以离你想要的期望输出还有距离。
修正后的代码实现
要实现你的需求(将列表中的偶数元素持续除以2直至变为1,收集每一步的结果,奇数元素移除),我们可以用一个while循环持续处理当前列表,直到列表为空。每一轮处理时,我们生成下一轮要处理的列表,同时收集所有处理后的结果:
# 读取输入列表(不需要单独读n,直接split即可) input_list = list(map(int, input().split())) output = [] # 持续处理直到没有需要继续处理的元素 while input_list: next_round = [] for num in input_list: if num % 2 == 0: divided = num // 2 output.append(divided) # 如果除以2后还大于1,说明需要继续处理,加入下一轮列表 if divided > 1: next_round.append(divided) # 奇数元素直接跳过(移除) # 更新为下一轮要处理的列表 input_list = next_round # 按要求输出结果,用空格分隔 print(' '.join(map(str, output)))
验证结果
对于输入4 32 60 8 200,运行这段代码会得到:2 16 30 4 100 1 8 15 2 50 4 1 25 1
如果你的期望输出是16 30 4 100 8 15 2 50 4 1 25 1,看起来是忽略了初始元素4第一次除以2得到的2,以及后续的2→1中的第一个1?这可能是需求描述或期望输出的小偏差,但核心逻辑已经实现:持续将偶数除以2直到变为1,收集所有中间结果,移除奇数元素。
内容的提问来源于stack exchange,提问作者Heisenberg
相关产品推荐
相关产品推荐

