不会栈溢出的嵌套结构展平
2019-03-05 本文已影响0人
FSS_Sosei
def nested_structure_flattening(sequence: iter) -> 'generator': #嵌套结构展平
iterators = [iter(sequence)]
while iterators != []: #直到iterators列表为空
#iterators最多嵌套深度n的n个迭代器在列表里
for item in iterators[-1]: #取iterators里最后那个迭代器进行for,对取到的迭代器内容从左往右遍历
if isinstance(item, (list, set, tuple)):
#item还是(list, set, tuple)之一的话,变iter(item)后添加到iterators结尾,随即break,开始深度遍历
iterators.append(iter(item))
break
else:
yield item
else:
#最深嵌套的迭代器耗尽,回过头来循环它的父迭代器。因为把列表变成iter(item)迭代器了,所以对父迭代器的再次遍历不会有已经提取的部分
iterators.pop()