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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python自动登录126邮箱的方法
Jul 10 Python
Windows下python2.7.8安装图文教程
May 26 Python
Python设计模式之命令模式简单示例
Jan 10 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Django 全局的static和templates的使用详解
Jul 19 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
Python中print函数简单使用总结
Aug 05 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Pytest mark使用实例及原理解析
Feb 22 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 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读取数据库信息的几种方法
2008/05/24 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
Python计算程序运行时间的方法
2014/12/13 Python
python分析apache访问日志脚本分享
2015/02/26 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
化工专业应届生求职信
2013/11/08 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
《赶海》教学反思
2014/04/20 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
个人借条范本
2015/05/25 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
90条交通安全宣传标语
2019/10/12 职场文书