无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(python flatten) python中flatten()函数用法详解 如何在Python中实现flatten()函数?:多种方法来“平铺”列表 全网首发(图文详解1)

前沿技术 Micheal 4周前 (06-26) 13次浏览 已收录 扫描二维码

(python flatten) python中flatten()函数用法详解

在Python中,并没有内置的flatten()函数来直接平铺多维数据结构,如列表。通常所说的flatten()功能是指将嵌套的多维列表(如二维或三维列表)转换为一维列表。实现这一功能可以通过多种方法,下面将详细介绍几种常见的方法来“平铺”列表。

方法1: 使用递归

我们可以编写一个递归函数来遍历嵌套列表,并将所有非列表元素添加到一个新列表中。

def flatten(nested_list):
    result = []
    for element in nested_list:
        if isinstance(element, list):
            result.extend(flatten(element))  # 若是列表则递归调用
        else:
            result.append(element)  # 若不是列表,则添加到结果列表中
    return result

# 使用示例
nested_list = [[1, 2, [3, 4]], [5, 6], 7]
flattened_list = flatten(nested_list)
print(flattened_list)  # 输出将会是: [1, 2, 3, 4, 5, 6, 7]

这种方法可以处理任意深度的嵌套列表。

方法2: 使用迭代和栈

我们也可以使用迭代的方式而不是递归来平铺列表,通常会用到栈的数据结构。

def flatten(nested_list):
    stack = list(reversed(nested_list))  # 将列表反转并放入栈中以便从左侧开始处理
    result = []
    while stack:
        element = stack.pop()
        if isinstance(element, list):
            stack.extend(reversed(element))  # 如果元素是列表,反转后放入栈中
        else:
            result.append(element)
    return result

# 使用示例同上

方法3: 使用生成器

我们可以创建一个生成器函数,它能够递归地遍历列表,并yield所有的非列表元素。

def flatten_generator(nested_list):
    for element in nested_list:
        if isinstance(element, list):
            yield from flatten_generator(element)  # 递归的生成器调用
        else:
            yield element

# 使用示例
nested_list = [[1, 2, [3, 4]], [5, 6], 7]
flattened_list = list(flatten_generator(nested_list))
print(flattened_list)  # 输出将会是: [1, 2, 3, 4, 5, 6, 7]

使用生成器可以更有效地处理大列表,因为它们在内存中只需保存当前的元素。

方法4: 使用库函数

在Python中有一些库,如numpyitertools提供了工具来平铺列表。

# 例如,使用numpy库可以这样做:
import numpy as np

def flatten_with_numpy(nested_list):
    return list(np.concatenate(nested_list).flat)

# 使用示例同上

或者,如果你只是处理二维列表,可以使用此方法简化:

flattened_list = sum(nested_list, [])

但是,如果列表嵌套比较深,以上简单的求和方法会无效,此时应使用前面介绍的方法。

以上就是在Python中实现flatten()功能的几种方法。在选择具体方法时应考虑到列表的深度和大小,以及是否希望导入外部库。
(hadoop端口) Hadoop之常用端口号解读 Hadoop常用端口号 全网首发(图文详解1)
(curl.exe) curl.exe安装使用的最全参数详解以及常用命令汇总 常用命令工具curl 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝