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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:27:32