如何在python中拆分新列表中的子列表

zengzsys  于 2021-09-08  发布在  Java
关注(0)|答案(4)|浏览(319)

关闭。这个问题需要更加关注。它目前不接受答案。
**想改进这个问题吗?**编辑这篇文章,更新这个问题,使它只关注一个问题。

13小时前关门。
改进这个问题
如何解决以下问题?
给定一个包含子列表的列表。
例如:-

list = [1,2,[3,4],5,[6,7,[8,9,10]]

我想将列表拆分为一个列表,同时删除所有子列表。
输出应该是

[1,2,3,4,5,6,7,8,9,10]
smtd7mpg

smtd7mpg1#

我认为这个问题非常适合递归:

def flatten(x, r=[]):
    if type(x) is list:
        temp = []
        for i in x:
            temp += flatten(i)
        return r+temp
    else:
        return [x]

flatten([1, 2, [3, 4], 5, [6, 7, [8, 9, 10]]])

# output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ftf50wuq

ftf50wuq2#

基本上,您可以遍历列表,查看当前元素本身是否是列表。如果不是,则将其添加到新列表中。如果是,则迭代列表并重复。
这不是最好的、最小的或最常用的python方式,但这种方式可能有助于您理解它:

list_in = [1,2,[3,4],5,[6,7,[8,9,10]]]
new_list = []

def unfold_list(l):
    for x in l:
        if isinstance(x, list):
            unfold_list(x)
        else:
            new_list.append(x)

unfold_list(list_in)
print(new_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

关于barmar对sujay回答的评论,请注意:确实应该避免使用globals。我上面的代码纯粹是为了帮助理解问题和(其中一个)解决方案。

g9icjywg

g9icjywg3#

看看这个:

new_l=[]
def flatten(lists):
    for i in lists:
        if isinstance(i,list):
            flatten(i)
        else:
            new_l.append(i)
    return new_l
list2d = [1,2,[3,4],5,[6,7,[8,9,10]]]
print(flatten(list2d))
nwo49xxi

nwo49xxi4#

试试这个

def flatten(list_of_lists):
    if len(list_of_lists) == 0:
        return list_of_lists
    if isinstance(list_of_lists[0], list):
        return flatten(list_of_lists[0]) + flatten(list_of_lists[1:])
    return list_of_lists[:1] + flatten(list_of_lists[1:])

print(flatten([1, 2, [3, 4], 5, [6, 7], [8, 9, 10]]))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

相关问题