python展开嵌套list,flatten 嵌套 list

643 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


问题定义

比如有一个list,嵌套了三层:

a = [[1, 2], ['a', 'b', [3, 4]]]

现在想将其变为:

a = [1, 2, '1', 'd', 3, 4]

也就是说,无论嵌套了多少层的list,我们都想将其flatten为一层的list。

解决方案 (一):

实现一个递归函数:

def flatten(nest_list:list):
    out = []
    for i in nest_list:
        if isinstance(i, list):
            tmp_list = flatten(i)
            for j in tmp_list:
                out.append(j)
        else:
            out.append(i)
    return out

解决方案(一行代码):

其实可以更加简化:

def flatten(nest_list:list):
    return [j for i in nest_list for j in flatten(i)] if isinstance(nest_list, list) else [nest_list]

测试输出:


a = [[1,2], ['a','b', [3, 4]]]
b = flatten(a)
print(b)
# 输出: [1, 2, 'a', 'b', 3, 4]

好用的话,记得来点赞。


列表

列表用于将多个项目存储在单个变量中。

列表是 Python 中用于存储数据集合的 4 种内置数据类型之一,另外 3 种是Tuple、 SetDictionary,它们都具有不同的质量和用途。

列表是使用方括号创建的:

多变

列表是可更改的,这意味着我们可以在创建列表后更改、添加和删除列表中的项目。


允许重复

由于列表是索引的,因此列表可以包含具有相同值的项目:

例子

列表允许重复值:

thislist = ["apple", "banana", "cherry", "apple", "cherry"]
print(thislist)

当您想要基于现有列表的值创建新列表时,列表推导提供了更短的语法。

例子:

基于水果列表,您需要一个新列表,其中仅包含名称中带有字母“a”的水果。

如果没有列表理解,您将不得不编写一个for带有条件测试的语句:

例子

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []

for x in fruits:
if "a" in x:
newlist.append(x)

print(newlist)

使用列表推导,您只需一行代码即可完成所有操作:

例子

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)