# 扁平化处理嵌套型的序列
from collections import Iterable
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x
items = [1, 2, [3, 4, [5, 6], 7], 8]
for x in flatten(items):
print(x, end=\'\') # 12345678
items = [\'Dave\', \'Paula\', [\'Thomas\', \'Lewis\']]
for x in flatten(items):
print(x, \',\', end=\'\') # Dave ,Paula ,Thomas ,Lewis ,
代码中的参数ignore_types和对not isinstance(x, ignore_types)的检查是为了避免将字符串和字节串解释为可迭代对象,进而将它们展开为单独的一个个字符。如果还有其他类型不想展开的,可以为ignore_types参数提供不同的值来确定。
yield from 是一个快捷方式,相当于返回了另一个生成器,等同于下面这种写法:
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
for i in flatten(x):
yield i
else:
yield x
继续阅读与本文标签相同的文章
怎样在云服务器中进行灾难恢复?
-
阿里巴巴20周年年会结束以后,你知道发生了什么吗?
2026-05-18栏目: 教程
-
13年IT老兵:闷头做智能家居体系容易走火入魔
2026-05-18栏目: 教程
-
今天起,我要成为这样的阿里巴巴
2026-05-18栏目: 教程
-
中国智能家居的蝴蝶效应
2026-05-18栏目: 教程
-
2019年回顾 - Joomla前12名SEO扩展和插件
2026-05-18栏目: 教程
