美文网首页
Checkin笔记 - Flatten a List

Checkin笔记 - Flatten a List

作者: 鹿呀鹿呀快开门 | 来源:发表于2019-08-20 11:36 被阅读0次

    题目

    将一个嵌套的列表展开成一维列表,嵌套的层数不固定。例如,输入一个 列表[[[2]], [4, [5, 6, [6], 6, 6, 6], 7]],展开后成为[2, 4, 5, 6, 6, 6, 6, 6, 7]

    我的解法

    这是借鉴了《python基础教程》中的对于list展开的方法,利用递归算法。

    def flat_list(array):
        return list(flaten(array))
    
    def flaten(array):
        try:
            for sublist in array:
                for element in flaten(sublist): #此处进行递归处理
                    yield element
        except TypeError:
            yield array
    
        
    if __name__ == '__main__':
        assert flat_list([1, 2, 3]) == [1, 2, 3], "First"
        assert flat_list([1, [2, 2, 2], 4]) == [1, 2, 2, 2, 4], "Second"
        assert flat_list([[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]) == [2, 4, 5, 6, 6, 6, 6, 6, 7], "Third"
        assert flat_list([-1, [1, [-2], 1], -1]) == [-1, 1, -2, 1, -1], "Four"
        print('Done! Check it')
    

    别人的代码

    这个代码比较有意思,将待处理的列表转换为字符串,然后用正则表达式去替换其中的列表符号。但是可能出现的问题是,当[]本身是列表的元素时会出现错误。

    def flat_list(array):
        import re
        return [int(i) for i in re.findall(r'[-]?\d+', str(array))]
    

    相关文章

      网友评论

          本文标题:Checkin笔记 - Flatten a List

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