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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
Python多进程同步简单实现代码
Apr 27 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
python 字典套字典或列表的示例
Dec 16 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
python中pyqtgraph知识点总结
Jan 26 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 Python
Pytorch 如何实现常用正则化
May 27 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
php导出生成word的方法
2015/12/25 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
详解js中==与===的区别
2017/01/08 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
python mysql断开重连的实现方法
2019/07/26 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
物流专业大学生求职信范文
2013/10/28 职场文书
交通安全横幅标语
2014/10/07 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
地道战观后感
2015/06/04 职场文书
孔繁森观后感
2015/06/10 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫