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 multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
python函数的万能参数传参详解
Jul 26 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
python实现画循环圆
Nov 23 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
python利用文件时间批量重命名照片和视频
Feb 09 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
微信支付开发订单查询实例
2016/07/12 PHP
jquery 图片轮换效果
2010/07/29 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
详解package.json版本号规则
2019/08/01 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Python运用于数据分析的简单教程
2015/03/27 Python
Django中使用Celery的方法示例
2018/11/29 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python assert语句的简单使用示例
2019/07/28 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
银行实习生的自我评价
2014/01/13 职场文书
经济担保书范文
2014/04/02 职场文书
禁止酒驾标语
2014/06/25 职场文书
企业员工集体活动方案
2014/08/17 职场文书
农行心得体会
2014/09/02 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
员工自我评价范文
2015/03/11 职场文书
2015年外联部工作总结
2015/04/03 职场文书
教师听课学习心得体会
2016/01/15 职场文书
电力安全学习心得体会
2016/01/18 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python