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