如何将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
相关产品推荐
相关产品推荐

