美文网首页码农
不会栈溢出的嵌套结构展平

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

作者: FSS_Sosei | 来源:发表于2019-03-05 16:47 被阅读0次

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

    相关文章

      网友评论

        本文标题:不会栈溢出的嵌套结构展平

        本文链接:https://www.haomeiwen.com/subject/iglouqtx.html