在Python中扁平化嵌套的列表 [重复]。

问题描述 投票:0回答:1

我在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']

有没有一种方法可以只平移这个列表里面的列表 而不平移单个字符串?如果术语不正确,很抱歉,我对操作这种列表不太熟悉。谢谢您

python nested-lists
1个回答
2
投票
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']

© www.soinside.com 2019 - 2024. All rights reserved.