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实现父类调用两种方法的不同
Jan 15 Python
Python中with及contextlib的用法详解
Jun 08 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
Python request使用方法及问题总结
Apr 26 Python
python线程池如何使用
May 28 Python
零基础学python应该从哪里入手
Aug 11 Python
python 制作本地应用搜索工具
Feb 27 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
简述Python中的面向对象编程的概念
2015/04/27 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python实现BackPropagation算法
2017/12/14 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
介绍一下gcc特性
2015/10/31 面试题
火锅店营销方案
2014/02/26 职场文书
开学典礼决心书
2014/03/11 职场文书
技校毕业生自荐信
2014/06/03 职场文书
2015年元旦标语大全
2014/12/09 职场文书
干部年终考核评语
2015/01/04 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
创业计划书之水果店
2019/07/18 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
ant design vue的form表单取值方法
2022/06/01 Vue.js