Python 平铺序列

  • Post category:Python

Python 中的平铺序列(Flattening a sequence)指的是将多层嵌套的序列展开为单层序列的过程。对于这个问题,Python 提供了多种解决方案,包括使用循环、递归和库函数等方法。

方法一:使用循环

我们可以通过嵌套循环的方式来展开多层嵌套的序列。具体来讲,我们可以先定义一个空列表,然后遍历输入的序列,对于其中的每一个元素检查它是否是列表,如果是,则对其进行递归遍历;如果不是,则将其添加到输出列表中。

下面是该方法的 Python 代码实现:

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

其中,isinstance() 函数用于判断一个对象是否是一个已知的类型,它的第一个参数是需要判断的对象,第二个参数是一个元组,表示需要判断的类型。在此例中,我们向其传递了 (list, tuple),表示需要判断是否是列表或元组类型。

下面是一个示例:

seq = [1, 2, [3, 4, [5, 6]], 7, [8, 9]]
result = flatten(seq)
print(result)

输出结果为:

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

方法二:使用库函数

除了自己编写展开多层嵌套序列的函数外,Python 还提供了内置的库函数来实现该功能。其中,itertools.chain() 函数可将多个迭代器组合成一个序列,即将多个序列平铺为单层序列。该函数定义如下:

itertools.chain(*iterables)

其中,*iterables 表示传入多个可迭代对象。

下面是使用 itertools.chain() 函数展开序列的 Python 代码实现:

import itertools

def flatten(seq):
    return list(itertools.chain.from_iterable(
        (i if isinstance(i, (list, tuple)) else [i] for i in seq)))

其中,itertools.chain.from_iterable() 函数将一个多层嵌套的序列展开,它的参数就是一个包含多个序列的迭代器。

下面是一个示例:

seq = [1, 2, [3, 4, [5, 6]], 7, [8, 9]]
result = flatten(seq)
print(result)

输出结果为:

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

这些方法的实现可以根据具体情况和需求选择不同的方式。