Python 展开多层嵌套的列表 |
您所在的位置:网站首页 › python求嵌套列表层数 › Python 展开多层嵌套的列表 |
Python 展开多层嵌套的列表2018-04-24标签:
PYTHON扫一扫,转发文章
本文将讨论:如果有一个多维列表 List,也就是多层嵌套(nested)的关系,如何提取列表的所有元素,将高维度的列表转化为一维列表? 背景有些列表的元素是多层嵌套(nested)在子列表里,并且深度未知,比如 [1, 'a', ['b', ['c'], [ ], [3, 4]]]本文介绍将这种列表由二维或者更高维转化到一维(也叫展平,flatten)的方法,即希望最终得到这样的结果: 1, a, b, c, 3, 4 已知嵌套层数如果明确知道嵌套列表的层级,那么可以用 Python 多重列表解析里for的顺序 里的方法,使用列表解析或者多重循环的方法展平。 未知嵌套层数这是更为通用的方法,需要用递归的方法,可以参考这篇 Python 用递归生成器计算笛卡尔积 假如我们把函数叫做 def 展开(任意序列)具体定义是这样的: def 展开(任意序列): 对于 任意序列 里的 每一项: 如果 仍然是序列: 给出(yield)展开(这个序列) 里的每一项 否则: 给出(yield)这一项写成 Python 代码就是: def flatten(sequence): for item in sequence: if type(item) is list: for subitem in flatten(item): yield subitem else: yield item a = [1, 'a', ['b', ['c'], [ ], [3, 4]]] for x in flatten(a): print x, 用列表解析实现是使用 List comprehension 和 lambda 匿名函数的方法,将上面的递归式写在一行以内。 flatten = lambda x: [subitem for item in x for subitem in flatten(item)] \ if type(x) is list else [x] a = [1, 'a', ['b', ['c'], [ ], [3, 4]]] for x in flatten(a): print x,最终的运行结果是: 1 a b c 3 4 用 reduce 实现如果你使用 Python3,由于 reduce 函数在Python3 里不再是全局函数,所以使用之前需要先引入:from functools import reduce 比如:一个二维数组降维到一维,可以像下面这么写: reduce(lambda x,y:x+y,[[1,2],[3,4]])得到的结果是: [1, 2, 3, 4] 标签: PYTHON精彩评论 捐助本站为了保证阅读体验,本站不安放广告。但是,租用服务器和编写文章需要个人资金和时间的投入。 如果您觉得文章对您有用,请考虑捐助小站(金额不限),以期待更多原创文章。>>捐助记录 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |