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中利用生成器实现的并发编程
May 04 Python
Python 中的with关键字使用详解
Sep 11 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
celery4+django2定时任务的实现代码
Dec 23 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python简单贪吃蛇开发
Jan 28 Python
Python调用C语言的实现
Jul 26 Python
深入学习python多线程与GIL
Aug 26 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
tensorflow2.0教程之Keras快速入门
Feb 20 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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
再次研究下cache_lite
2007/02/14 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
Python如何读写二进制数组数据
2020/08/01 Python
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
2014全国两会心得体会
2014/03/17 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
nginx 配置指令之location使用详解
2022/05/25 Servers