首页 > 解决方案 > 在 Python 中展平嵌套列表

问题描述

我在扁平化 Python 中的嵌套列表部分时遇到了一些困难。这是列表:

[['31', '1'], '32', ['8', '16'], ['1', '3', '12'], ['4', '12'], '32', ['1', '3', '12'], ['4', '12'], '32', ['30', '1', '1']]

我想展平该列表中的任何列表,最终结果如下所示:

['31', '1', '32', '8', '16', '1', '3', '12', '4', '12', '32', '1', '3', '12', '4', '12', '32', '30', '1', '1']

通过查找方法,我尝试了以下代码:

list1 = (list(itertools.chain.from_iterable(list1)))

但是,它不仅会扁平化列表,还会扁平化单个字符串,拆分任何超过 1 个字符的字符串(即 '32' 变为 '3'、'2'),如下所示:

['31', '1', '3', '2', '8', '16', '1', '3', '12', '4', '12', '3', '2', '1', '3', '12', '4', '12', '3', '2', '30', '1', '1']

有没有办法只展平这个列表中的列表而不是单个字符串?抱歉,如果术语不正确,我对操作这种列表不太熟悉。谢谢!

标签: pythonnested-lists

解决方案


arr = [['31', '1'], '32', ['8', '16'], ['1', '3', '12'], ['4', '12'], '32', ['1', '3', '12'], ['4', '12'], '32', ['30', '1', '1']]

def extract(array):
    for item in array:
        if type(item) in [set, list, tuple]:
            yield from extract(item)
        else:
            yield item

print(list(extract(arr)))

['31', '1', '32', '8', '16', '1', '3', '12', '4', '12', '32', '1', '3', '12', '4', '12', '32', '30', '1', '1']


推荐阅读