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 Django模板的使用方法(图文)
Nov 04 Python
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
python异常处理try except过程解析
Feb 03 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
提取视频中的音频 Python只需要三行代码!
May 10 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根据日期显示所在星座的方法
2015/07/13 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
python映射列表实例分析
2015/01/26 Python
Python中有趣在__call__函数
2015/06/21 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
pygame实现成语填空游戏
2019/10/29 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
如何基于python实现不邻接植花
2020/05/01 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
使用Python封装excel操作指南
2021/01/29 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
超市实习总结自我鉴定
2013/09/19 职场文书
求职简历自荐信
2013/10/20 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript