码农

不会栈溢出的嵌套结构展平

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()

上一篇下一篇

猜你喜欢

热点阅读