4.14 如何处理有嵌套型的数据
- 可以通过 yield from语句来扁平化处理
>>> from collections import Iterable
>>> def f(items,ignore_type=(str,bytes)):
... for x in items:
... if isinstance(x,Iterable) and not isinstance(x,ignore_type):
... yield from f(x)
... else:
... yield x
...
>>> items=[1,2,[3,4,[5,6],7],8]
>>> for x in f(items):
... print(x)
...
1
2
3
4
5
6
7
8
>>>
-
在上述代码中,isinstance(x,Iterable)简单地检查是否有某个元素可以迭代遍历
-
如果有那么就用yield from将这个嵌套的对象进行递归。
-
代码中的ignore_type和not isinstance的检查是为了避免将字符串和字节串解释为可遍历对象
网友评论