python 实现多层列表拆分成单层列表

有个多层列表:[1, 2, 3, 4, [5, 6, [7, 8]], [‘a’, ‘b’, [2, 4]]],拆分成单层列表

顺序不同

def split(li):
    pop_index_list = []  # 用来存储需要删除元素的索引
    for ele in li:
        if isinstance(ele, list):
            pop_index_list.insert(0, li.index(ele))
            li.extend(ele)

    for i in pop_index_list:
        li.pop(i)

   
li = [1, 2, 3, 4, [5, 6, [7, 8]], ['a', 'b', [2, 4]]]
split(li)
print(li)
# 结果 [1, 2, 3, 4, 5, 6, 'a', 'b', 7, 8, 2, 4]

顺序相同

def split(li:list):
    for parent_i, parent_ele in enumerate(li):
        if isinstance(parent_ele, list):
            li.remove(parent_ele)
            for sub_i, sub_ele in enumerate(parent_ele):
                li.insert(parent_i+sub_i, sub_ele)
  
li = [1, 2, 3, 4, [5, 6, [7, 8]], ['a', 'b', [2, 4]]]
split(li)
print(li)        
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b', 2, 4]

递归方式

def split(li:list, new_list=[]):
    for ele in li:
        if isinstance(ele, list):
            split(ele)
        else:
            new_list.append(ele)
    return new_list
li = [1, 2, 3, 4, [5, 6, [7, 8]], ['a', 'b', [2, 4]]]
print(split(li))
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b', 2, 4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值