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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
linux下python使用sendmail发送邮件
May 22 Python
Python多线程原理与用法实例剖析
Jan 22 Python
关于numpy数组轴的使用详解
Dec 05 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
Django跨域请求原理及实现代码
Nov 14 Python
python try...finally...的实现方法
Nov 25 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
python调用cmd复制文件代码分享
2013/12/27 Python
python数据结构之二叉树的建立实例
2014/04/29 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
创意广告词
2014/03/17 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
演讲稿开场白台词
2014/08/25 职场文书
离婚答辩状范文
2015/05/22 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
银行柜员工作心得体会
2016/01/23 职场文书