Python 平铺序列

  • Post category:Python

Python 平铺序列(Flattern)

介绍

平铺序列,也称为“展平序列”,指的是将多层嵌套的序列按顺序展开成一维序列的过程。在 Python 中,可以使用递归、循环或库函数等方法实现使用平铺序列,本文将介绍三种方法,供大家参考。

递归方法

需要遍历序列内的每个元素,如果是序列则递归展开,并将结果存入新列表中。

def flatten(lst):
    new_lst = []
    for item in lst:
        if isinstance(item, list):
            new_lst.extend(flatten(item))
        else:
            new_lst.append(item)
    return new_lst

使用示例:

lst = [[1, 2, [3, 4]], [5, 6], 7]
print(flatten(lst))

输出结果:

[1, 2, 3, 4, 5, 6, 7]

利用yield函数和递归实现

使用Python的生成器函数和递归展开序列。

def flatten2(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten2(item)
        else:
            yield item

使用示例:

lst = [[1, 2, [3, 4]], [5, 6], 7]
print(list(flatten2(lst)))

输出结果:

[1, 2, 3, 4, 5, 6, 7]

库函数

使用Python标准库中的itertools模块中的chain.from_iterable

from itertools import chain

def flatten3(lst):
    return list(chain.from_iterable(lst))

使用示例:

lst = [[1, 2, [3, 4]], [5, 6], 7]
print(flatten3(lst))

输出结果:

[1, 2, 3, 4, 5, 6, 7]

总结

使用三种方法都能够实现序列展开的功能。其中递归方法的思路最为清晰,但可能因为Python中递归深度限制,而导致无法展开过深的序列。使用生成器的方法相比递归方法而言,生成器只需处理当前需要展开的元素,因此比递归方法更加节省空间。库函数虽然使用相对简单,但可读性不如其他两种方法明显。在实际应用中,选择哪种方法还要依据场景和数据规模的巨小等因素加以考虑。