19 lines
776 B
Python
19 lines
776 B
Python
from collections import Iterable
|
||
|
||
if __name__ == '__main__':
|
||
|
||
# 将复杂的序列扁平化,使用递归来脱壳
|
||
def flatten(items, ignore=(str, bytes)):
|
||
for item in items:
|
||
# 要进行递归,首先这个元素要是可迭代的,其次它不能是字符串或二进制串
|
||
if isinstance(item, Iterable) and not isinstance(item, ignore):
|
||
# yield from 将请求转发到flatten函数返回的迭代器进行嵌套,避免再写for循环
|
||
# yield from 在后面的协程和基于生成器的并发程序里有重要作用
|
||
yield from flatten(item, ignore)
|
||
else:
|
||
yield item
|
||
|
||
a = [1, 2, [3, 4, [5, 6], 7], 8]
|
||
for item in flatten(a):
|
||
print(item)
|