zoukankan      html  css  js  c++  java
  • python 展开嵌套列表

    python 展开嵌套列表

    引言

    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 "<pyshell#77>", line 1, in <module>
        flat_list = [item for sublist in li for item in sublist]
      File "<pyshell#77>", line 1, in <listcomp>
        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

  • 相关阅读:
    npm 插件发布和使用
    git 配置与删除远程地址
    elment 编辑输出行数据后,过滤下拉,值必须全等于下拉值
    后台 接口 传值 不同类型的详细解说
    Vue vscode调试
    vue 标题和输入框分两行,调成一行
    ES6 学习笔记(持续更新中)
    vue开发WebApp 开发笔记(持续更新)
    移动端自适应方案 对应设计图制作
    css 颜色使用预览 码表
  • 原文地址:https://www.cnblogs.com/songbiao/p/12689708.html
Copyright © 2011-2022 走看看