关注+星标,每天学习Python新技能
在本文中,我将介绍几种在 Python 中展平嵌套列表的方法,展平的概念就是将列表子元素拿出来合并成一个单独的列表,我们看例子解释:
假设你有以下列表:
list1= [ [1, 2], [3, 4], [5, 6, 7], [8] ]
list2= [1, [2, 3], [4, 5], 6, [7, 8]]
list1 是列表,内部元素也是列表,而 list2 是包含列表和非列表的列表。
展平 list1:
defflatten1(l):
result= []
foriteminl:
forsubiteminitem:
result.append(subitem)
returnresult
>>>flat_list=flatten1(list1)
>>>flat_list
[1, 2, 3, 4, 5, 6, 7, 8]
展平包含列表和其他类型的列表
上面的代码使用两个 for 循环来遍历每个列表元素和每个子列表, 在子列表的每次迭代中,它将列表元素附加到一个空列表,上面的代码也可以这样使用生成器编写:
defflatten1(l):
foriteminl:
forsubiteminitem:
yieldsubitem
>>>flat_list=list(flatten1(list1))
>>>flat_list
[1, 2, 3, 4, 5, 6, 7, 8]
或者,你可以使用列表理解使其简洁:
>>>flat_list= [subitemforiteminlforsubiteminitem]
>>>flat_list
[1, 2, 3, 4, 5, 6, 7, 8]
上面的示例非常适用于列表的列表, 如果某些列表元素不是列表,如 list2 中的情况,你需要稍微修改列表展平函数:
defflatten1(l):
foriteminl:
ifnotisinstance(item, list):
yielditem
else:
forsubiteminitem:
yieldsubitem
>>>flat_list=flatten1(list2)
>>>flat_list
[1, 2, 3, 4, 5, 6, 7, 8]
扁平化列表的其他方法下面是根据你自己擅长的工具来展平列表的其他方法列表
>>>fromfunctoolsimportreduce
>>>importoperator
>>>reduce(operator.add, list1)
[1, 2, 3, 4, 5, 6, 7, 8]
>>>importitertools
>>>flat_list-itertools.chain_from_iterable(list1)
>>>list(flat_list)
[1, 2, 3, 4, 5, 6, 7, 8]
>>>frommatplotlib.cbookimportflatten
>>>list(flatten(list1)
>>> from pandas.core.common import flatten
>>> list(flatten(list1))
>>> from setuptools.namespaces import flatten
>>> list(flatten(list1))
>>> from django.contrib.admin.utils import flatten
>>> flatten(list1)
[1, 2, 3, 4, 5, 6, 7, 8]
>>> flatten(list2)
[1, 2, 3, 4, 5, 6, 7, 8]
Django 的 flatten 函数可以展平任何类型的列表,这个比较强大。
总结通过上面例子详细大家已经了解了如何展平一个列表,本文最后还介绍了其他一些方式例 Pandas、Django、itertools、Matplotlib、Reduce 等,主要是看情况,如果用到了这些包就可以直接用这些方法,有兴趣大家可去对比下各个方法的性能。

▲点击关注-免费领取
推荐阅读
Python:AI大模型时代的"瑞士军刀"——从开发到部署的全栈利器
点击 阅读原文