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

Python3如何基于元素值拆分扁平列表为子列表及代码异常原因

问题分析与解决

错误原因

核心问题出在lst=[[]]*(number_of_sublists+1)这行代码。Python中使用*运算符复制包含可变对象(如列表)的序列时,实际复制的是对象的内存引用,而非新建独立对象。你生成的lst中所有子列表本质都指向内存中的同一个列表,因此不管向哪个索引的子列表追加元素,所有子列表都会同步更新,最终出现三个子列表内容完全相同的错误结果。

修复方案

最小改动原有代码的方案

仅修改子列表初始化逻辑,用列表推导式生成独立的空列表即可:

arr = [1,-1,4,-1,4,2]
number_of_sublists = arr.count(-1)
# 列表推导式会每次循环新建一个独立的空列表
lst = [[] for _ in range(number_of_sublists + 1)]
    
idx = 0
for i in arr:
    if i == -1:
        idx += 1
    else:
        lst[idx].append(i)
print(lst) # 输出[[1], [4], [4, 2]]

更简洁的通用实现

无需提前统计-1的数量,遍历过程中动态生成子列表:

arr = [1,-1,4,-1,4,2]
res = []
current_sublist = []
for num in arr:
    if num == -1:
        res.append(current_sublist)
        current_sublist = []
    else:
        current_sublist.append(num)
# 遍历结束后加入最后一段未收尾的子列表
res.append(current_sublist)
print(res) # 输出[[1], [4], [4, 2]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:54:00