当前位置:首页>python>如何在Python展平列表?

如何在Python展平列表?

  • 2026-09-02 19:07:51
如何在Python展平列表?

关注+星标,每天学习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]

扁平化列表的其他方法下面是根据你自己擅长的工具来展平列表的其他方法列表

Reduce

>>>fromfunctoolsimportreduce

>>>importoperator

>>>reduce(operator.add, list1)
[1, 2, 3, 4, 5, 6, 7, 8]

Itertools

>>>importitertools

>>>flat_list-itertools.chain_from_iterable(list1)

>>>list(flat_list)
[1, 2, 3, 4, 5, 6, 7, 8]

Matplotlib

>>>frommatplotlib.cbookimportflatten

>>>list(flatten(list1)

Pandas

>>> from pandas.core.common import flatten
>>> list(flatten(list1))

Setuptools

>>> from setuptools.namespaces import flatten
>>> list(flatten(list1))

Django

>>> 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公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

▲点击关注-免费领取

推荐阅读

12 分钟介绍所有主流 (Web) 框架

全球爆火的OpenClaw(小龙虾)到底是什么?

Python如果遇见乱码可以通过二进制判断是什么编码吗?

Python:AI大模型时代的"瑞士军刀"——从开发到部署的全栈利器

点击 阅读原文

最新文章

随机文章