page contents

如何在Python展平列表?

在本文中,我将介绍几种在 Python 中展平嵌套列表的方法,展平的概念就是将列表子元素拿出来合并成一个单独的列表,我们看例子解释:

attachments-2026-04-FN6ZmSTQ69dc4c6e68aff.png在本文中,我将介绍几种在 Python 中展平嵌套列表的方法,展平的概念就是将列表子元素拿出来合并成一个单独的列表,我们看例子解释:

假设你有以下列表:

list1 = [ [12], [34], [567], [8] ]


list2 = [1, [23], [45], 6, [78]]

list1 是列表,内部元素也是列表,而 list2 是包含列表和非列表的列表。

展平 list1:

def flatten1(l):
   result = []
   for item in l:
       for subitem in item:
           result.append(subitem)
   return result

>>> flat_list = flatten1(list1)
>>> flat_list
[12345678]


展平包含列表和其他类型的列表

上面的代码使用两个 for 循环来遍历每个列表元素和每个子列表, 在子列表的每次迭代中,它将列表元素附加到一个空列表,上面的代码也可以这样使用生成器编写:

def flatten1(l):
   for item in l:
       for subitem in item:
           yield subitem

>>> flat_list = list(flatten1(list1))
>>> flat_list
[12345678]

或者,你可以使用列表理解使其简洁:

>>> flat_list = [subitem for item in l for subitem in item]
>>> flat_list
[12345678]

上面的示例非常适用于列表的列表, 如果某些列表元素不是列表,如 list2 中的情况,你需要稍微修改列表展平函数:

def flatten1(l):
   for item in l:
       if not isinstance(itemlist):
           yield item
       else:
           for subitem in item:
               yield subitem

>>> flat_list = flatten1(list2)
>>> flat_list
[12345678]


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

Reduce

>>> from functools import reduce

>>> import operator

>>> reduce(operator.addlist1)
[12345678]

Itertools

>>> import itertools

>>> flat_list - itertools.chain_from_iterable(list1)

>>> list(flat_list)
[12345678]

Matplotlib

>>> from matplotlib.cbook import flatten

>>> 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编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1943 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1943 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章