Checkin笔记 - Flatten a List

题目

将一个嵌套的列表展开成一维列表,嵌套的层数不固定。例如,输入一个 列表[[[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))]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容