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

Python初学者求助:编写将数组中所有零移至末尾且保留非零元素顺序的算法

解决Python数组移零问题的正确姿势

首先,咱们来拆解下你代码里的几个关键问题:

  • 判断条件错配:你写的是array[i] == "0",但需求里的零是整数0,不是字符串"0",这会导致真正的整数0根本不会被统计和处理
  • 循环中修改数组的坑:在for循环里调用array.remove(0)会出问题——remove()会删除数组中第一个匹配的0,而非你当前循环到的那个;而且每次删除元素后数组长度变短,循环的range(length)是固定的原长度,这会导致索引错位,直接跳过部分元素
  • 追加错误类型的零:最后你append的是字符串"0",但需求是要整数0,结果会变成混合类型数组,不符合预期

那咱们来修复这些问题,先给你一个贴合你原有思路的修正版代码:

def move_zeros(array):
    zero_count = 0
    # 先收集所有非零元素,避免循环中修改原数组的索引问题
    non_zero_elements = []
    for num in array:
        if num == 0:
            zero_count += 1
        else:
            non_zero_elements.append(num)
    # 把统计好的整数零追加到末尾
    non_zero_elements.extend([0] * zero_count)
    return non_zero_elements

如果你想要更简洁高效的写法,用列表推导式一行就能搞定(可读性也拉满):

def move_zeros(array):
    # 先筛选所有非零元素,再补充对应数量的整数零
    non_zero = [x for x in array if x != 0]
    return non_zero + [0] * (len(array) - len(non_zero))

测试你给的例子试试:

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

完全符合你的需求~

额外补充:如果你的数组里可能出现其他假值(比如None、False),但你只想移动整数0的话,可以把判断条件改成isinstance(x, int) and x == 0,不过一般场景下x != 0就足够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:14:08