You need to enable JavaScript to run this app. Python按空列表拆分嵌套列表:保留空列表并合并连续非空项
优惠活动
大模型
产品
解决方案
定价
更多

Python按空列表拆分嵌套列表:保留空列表并合并连续非空项

需求说明

给定原始嵌套列表 [[],[],['a'],['b'],[],[],['c'],['d'],['m']],处理规则为:

  • 完整保留所有空列表的原有位置,不得挪动、删除空列表
  • 将位置上连续出现的非空子列表中的所有元素,合并为单个子列表
  • 最终要达成的目标结果为 [[],[],['a','b'],[],[],['c','d','m']]

原尝试代码的核心问题

目前写出的尝试逻辑存在明显偏差,无法输出预期结果,对应代码片段为:

my_temp = []
my_final = []
for item in my_array:
  if item != []:
    my_temp.append(item)
  else:
    my_final.append(my_temp);
    my_temp = []
print(my_final)

这段逻辑的问题点:

  • 遇到空列表时,没有把空列表本身原封不动放到结果里,反而把临时存储的my_temp整体当元素塞进去,从根上没做到“保留空列表原有位置”的要求
  • 临时存储的操作是把整个非空子列表追加进去,不是把列表内的元素拿出平铺合并,就算逻辑跑顺,最后得到的也是多层嵌套的结构,不是要求的合并元素后的单层子列表

可行实现方案

按照规则逐一遍历原始列表元素,区分“空列表节点”和“连续非空段”两个分支处理即可:

  • 遍历过程中遇到空列表时:如果当前有暂存的待合并非空元素,先把暂存的内容整合成列表追加到结果中,清空暂存区;再把当前遇到的空列表原封不动追加到结果里
  • 遍历过程中遇到非空列表时:把当前列表里的所有元素全部塞进暂存容器,等遇到空列表或者整个列表遍历结束时,再把暂存容器统一结算成一个合并后的子列表

对应可直接运行的代码:

my_array = [[],[],['a'],['b'],[],[],['c'],['d'],['m']]
my_final = []
pending_merge = []  # 暂存连续非空子列表的元素

for item in my_array:
    if item == []:
        # 遇到空列表时,先结算之前攒的非空内容
        if pending_merge:
            my_final.append(pending_merge)
            pending_merge = []
        # 原封不动保留当前的空列表位置
        my_final.append(item)
    else:
        # 非空列表就把里面的元素全部加到暂存区
        pending_merge.extend(item)

# 遍历结束后,处理最后一段没遇到空列表的剩余暂存内容
if pending_merge:
    my_final.append(pending_merge)

print(my_final)

代码运行后输出完全匹配目标结果 [[], [], ['a', 'b'], [], [], ['c', 'd', 'm']]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 23:57:02