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

如何将input_list=[1,0,3,2,0,1,0]转换为[1,1,2,3,0,0,0]?

问题分析与解决

原代码的问题

你的代码逻辑完全偏离目标,核心问题有两个:

  • 循环遍历的是列表的元素值而非索引:for a in input_list中,a取的是1、0、3这类列表里的具体值,不是用来定位元素的下标,导致后续input_list[a]的操作全是错误的位置访问。
  • 赋值逻辑错误:就算遍历的是索引,你的代码也没有实现“将非零元素前置、零后置”的逻辑,只是做了无意义的赋值。

正确解法

方法1:列表推导式(简单直观)

先收集所有非零元素,再补充对应数量的零,一步得到结果:

input_list = [1,0,3,2,0,1,0]
# 收集所有非零元素
non_zero_elements = [x for x in input_list if x != 0]
# 拼接非零元素和足够数量的零
result = non_zero_elements + [0] * (len(input_list) - len(non_zero_elements))
print(result)  # 输出: [1,1,2,3,0,0,0]

方法2:双指针原地修改(适合大列表,节省内存)

用两个指针在原列表上操作,不需要额外创建新列表:

input_list = [1,0,3,2,0,1,0]
slow = 0  # 慢指针:标记下一个非零元素要放置的位置

# 快指针遍历整个列表,找非零元素
for fast in range(len(input_list)):
    if input_list[fast] != 0:
        input_list[slow] = input_list[fast]
        slow += 1

# 把慢指针之后的所有位置设为零
for i in range(slow, len(input_list)):
    input_list[i] = 0

print(input_list)  # 输出: [1,1,2,3,0,0,0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:45:35