当我们需要将一个嵌套的序列铺平成一维列表时,我们可以使用 Python 中的平铺序列(flatten sequence)方法。下面是平铺序列的完整攻略。
什么是平铺序列
平铺序列是将嵌套的序列(比如列表中包含列表)展开成一维列表的处理方式。举个例子,如果我们有一个二维列表:
lst = [[1, 2], [3, 4]]
那么平铺序列操作后,得到的就是一个一维列表:
[1, 2, 3, 4]
如何使用平铺序列
方法一:递归实现
实现平铺序列的主要方式是递归。我们遍历每一项,如果发现该项也是列表,则递归调用平铺序列函数,将该项展平后加入到列表中,否则直接将该项加入到列表中。下面是一个例子:
def flatten(lst):
result = []
for item in lst:
if isinstance(item, list):
result.extend(flatten(item))
else:
result.append(item)
return result
在上面的代码中,我们使用了 isinstance
方法来判断当前项是否是列表类型。如果是,就继续递归调用 flatten
方法,将其展开后添加到结果列表中;如果不是,就将该项直接添加到结果列表中。最终返回结果列表。
方法二:使用yield生成器
另外一种实现平铺序列的方式是使用生成器。我们在遍历列表的过程中,如果当前项是一个列表,则使用 yield from
来遍历该列表;否则直接将该项 yield
给外部。下面是一个实现示例:
def flatten(lst):
for item in lst:
if isinstance(item, list):
yield from flatten(item)
else:
yield item
在上面代码中,我们使用了 yield from
来代替递归,实现了类似递归的操作。
示例说明
示例一:递归实现
下面是一个使用递归方式实现平铺序列的示例:
def flatten(lst):
result = []
for item in lst:
if isinstance(item, list):
result.extend(flatten(item))
else:
result.append(item)
return result
lst = [[1, 2, [3, [4, 5]]], 6]
print(flatten(lst)) # [1, 2, 3, 4, 5, 6]
在上面的代码中,我们先定义了一个嵌套列表 lst
,其中包含了多重嵌套。然后调用 flatten
方法,输出结果为 [1, 2, 3, 4, 5, 6]
。
示例二:使用yield生成器
下面是一个使用生成器方式实现平铺序列的示例:
def flatten(lst):
for item in lst:
if isinstance(item, list):
yield from flatten(item)
else:
yield item
lst = [[1, 2, [3, [4, 5]]], 6]
print(list(flatten(lst))) # [1, 2, 3, 4, 5, 6]
在这个例子中,我们使用生成器函数来展开一个多重嵌套的序列。同样输出结果为 [1, 2, 3, 4, 5, 6]
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 平铺序列 - Python技术站