python 展开嵌套列表

您所在的位置:网站首页 python嵌套列表元素求和 python 展开嵌套列表

python 展开嵌套列表

#python 展开嵌套列表| 来源: 网络整理| 查看: 265

python 展开嵌套列表

目录python 展开嵌套列表引言方法1,创建递归函数方法2,使用列表推导式其他的方法

引言

Python中的列表还可以将不同数据类型的项放在一个列表中。所以,一个嵌套的列表就是是一个包含多个列表的列表,例如[1,2,[3],[4,[5,6]]。

通常,我们需要将这些嵌套列表转换为平面列表(flatted a nested list),以便对数据执行常规列表操作。

方法1,创建递归函数

首先介绍,python中对一个嵌套的list,和一个空列表[],进行sum()函数运算时,可以实现展开列表。

>>> list_1 = [[1,2],[3]] >>> sum(list_1, []) [1, 2, 3]

于是,结合递归原理,可以创建展平嵌套列表的函数如下:

def flatten(li): return sum(([x] if not isinstance(x, list) else flatten(x) for x in li), []) >>> list_1 = [1, 2, [3], [4, [5, 6]]] >>> print(flatten(list_1)) [1, 2, 3, 4, 5, 6] 方法2,使用列表推导式 >>> li = [[14], [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]] >>> flat_list = [item for sublist in li for item in sublist] >>> print(flat_list) [14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7]

注意,对于嵌套的列表使用列表推导式时,两个遍历变量的写法要写正确,可以先按照逻辑写推导式中遍历的部分,比如,对于上面的推导式,首先按照逻辑,写遍历的部分是, for sublist in li ;然后继续按照逻辑往下写下一层遍历, for item in sublist。最后,按照逻辑知道,遍历到sublist中的item 就是最后要推导出来的新列表的元素,所以就在列表推导式的最前面加上item。最终组成了完整的嵌套列表的列表推导式。

还要注意的是,这种使用列表推导式展平列表的方法,要求必须是严格嵌套列表,也就是说列表中的每个元素都是列表,而没有非列表的元素,比如下例就会报错:

>>> li = [14, [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]] >>> flat_list = [item for sublist in li for item in sublist] Traceback (most recent call last): File "", line 1, in flat_list = [item for sublist in li for item in sublist] File "", line 1, in flat_list = [item for sublist in li for item in sublist] TypeError: 'int' object is not iterable

这个时候,第一个方法是可以正常工作的。

>>> flatten(li) [14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7] 其他的方法

其他的方法有,Flatten List using Inbuilt reduce Function ,Flatten List Using NumPy,请参考Convert Nested List To A Flat List In Python



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3