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]
这些方法的实现可以根据具体情况和需求选择不同的方式。