PYTHON压平嵌套列表的简单实现


Posted in Python onJune 08, 2016

list 是 Python 中使用最频繁的数据类型, 标准库里面有丰富的函数可以使用。

不过,如果把多维列表转换成一维列表(不知道这种需求多不多),还真不容易找到好用的函数,

要知道Ruby、Mathematica、Groovy中可是有flatten的啊。

如果列表是维度少的、规则的,还算好办

例如:

li=[[1,2],[3,4],[5,6]]
print [j for i in li for j in i]
#or
from itertools import chain
print list(chain(*li))
#or
a=[[1,2],[3,4],[5,6]]
t=[]
[t.extend(i) for i in a]
print t
#or
print sum(li,[])

对于复杂一些的,如:li=[1,[2],[[3]],[[4,[5],6]]],上面的方法就不好使了,得换个方法了,
从结构上看像是树状的,很容易联想到了目录的遍历,于是就有了下面的做法:

def flat(tree):
  res = []
  for i in tree:
    if isinstance(i, list):
      res.extend(flat(i))
    else:
      res.append(i)
  return res

另一种思路,嵌套列表无非就是有很多成对的方括号,一维的列表只有一对,把中间的去掉就行了,转换为字符串就好办了

def flatten(seq):
  s=str(seq).replace('[', '').replace(']', '') #当然也可以用正则
  return [eval(x) for x in s.split(',') if x.strip()]

不过,这种做法对于列表中出现包含"["或"]"的字符串时就无能为力了,需要改进.

其他方法:

国外某论坛上见到的,同样是递归,一行搞定

flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]

下面这个方法用到Tkinter模块,在邮件列表看到的方法。估计很多同学还不知道它能办到吧,也算是python自带。注意,windows版的python都自带Tkinter模块的,linux默认则没有

from Tkinter import _flatten

li=reduce(lambda *x:list(x),range(2,6),[1])
print li
print _flatten(li)
#Out:
#[[[[[1], 2], 3], 4], 5]
#(1, 2, 3, 4, 5)
#对元组同样适用

还有一些第三方模块提供这样的功能,如sympy、numpy、pipe等

对于嵌套的元组,无需多说了吧,只需稍加改动就可以了

以上这篇PYTHON压平嵌套列表的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过urllib2爬网页上种子下载示例
Feb 24 Python
pycharm 使用心得(四)显示行号
Jun 05 Python
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
python自动发微信监控报警
Sep 06 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
Python hashlib模块的使用示例
Oct 09 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 #Python
浅谈Python数据类型之间的转换
Jun 08 #Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 #Python
Python while 循环使用的简单实例
Jun 08 #Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 #Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 #Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 #Python
You might like
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
理解JavaScript中的事件
2006/09/23 Javascript
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
党建示范点实施方案
2014/03/12 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
实习介绍信范文
2015/05/05 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技