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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
Python中关键字is与==的区别简述
Jul 31 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
windows下python连接oracle数据库
Jun 07 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python带动态参数功能的sqlite工具类
May 26 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
python程序封装为win32服务的方法
Mar 07 Python
python nmap实现端口扫描器教程
May 28 Python
pytorch学习教程之自定义数据集
Nov 10 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--用万网的接口实现域名查询功能
2012/12/13 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
基于jquery的分页控件(C#)
2011/01/06 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
微信公众号H5支付接口调用方法
2019/01/10 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
房产公证书范本
2014/04/10 职场文书
低碳环保演讲稿
2014/08/28 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
装配出错检讨书
2014/09/23 职场文书
教师党员个人自我评价
2015/03/04 职场文书
劳动仲裁调解书
2015/05/20 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS