Python嵌套列表转一维的方法(压平嵌套列表)


Posted in Python onJuly 03, 2018

前一段去云英面试,技术官很”不厚道“了问了一个非常简单的问题:如何将多维列表转化了一维的?当时虽然想到了使用迭代或者列表生成式可以做到,但是可以没能可行的代码,回来后一顿后悔。

对于规范的且嵌套维度较低的多维列表,python中有很多方法可以实现:

a=[[1,2],[3,4],[5,6]]
print [j for i in li for j in i]
#or
from itertools import chain
print list(chain(*a))
#or
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
#or
a=[[1,2],[3,4],[5,6]]
t=[]
[t.extend(i) for i in a]
print t
#or
a=[[1,2],[3,4],[5,6]]
print sum(a,[])
#or
reduce(lambda x, y: x+ y, a)

对于复杂的多维嵌套列表就需要使用一些复杂的方法:

#递归的方法比较容易理解
def expand_list(nested_list):
  for item in nested_list:
    if isinstance(item, (list, tuple)):
      for sub_item in expand_list(item):
        yield sub_item
    else:
      yield item
      
#在stackoverflow看到大牛的列表生成式版本
func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x]
#生成式的方法还有很多,可以自行摸索

对于使用python2.X的童鞋,还可以使用flatten函数来做:

>>> d=[1,2,3,[4,5],[6,7,[8,9]]]
>>>from compiler.ast import flatten
>>>flatten(a)
[1, 2, 3, 4, 5, 6,7,8,9]

其实上边列举的方法仅仅是冰山一角,大海下的冰山就等这童鞋们自行去寻找挖掘了。

以上这篇Python嵌套列表转一维的方法(压平嵌套列表)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的装饰器详解
Apr 13 Python
详解Python多线程
Nov 14 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
Python异常处理知识点总结
Feb 18 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
Django ModelForm组件使用方法详解
Jul 23 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
python中count函数知识点浅析
Dec 17 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 #Python
Pandas 同元素多列去重的实例
Jul 03 #Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 #Python
Python单元测试简单示例
Jul 03 #Python
Python3使用pandas模块读写excel操作示例
Jul 03 #Python
Python+pandas计算数据相关系数的实例
Jul 03 #Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 #Python
You might like
php的字符串用法小结
2010/06/08 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python实现八大排序算法(2)
2017/09/14 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
python wsgiref源码解析
2021/02/06 Python
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
高校学生干部的自我评价分享
2013/11/04 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
消防先进事迹材料
2014/02/10 职场文书
节约用水演讲稿
2014/05/21 职场文书
学校四风对照检查材料
2014/08/28 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
检讨书范文300字
2015/01/28 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang