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实现得到一个给定类的虚函数
Sep 28 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
python计算auc指标实例
Jul 13 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python 字符串常用方法汇总详解
Sep 16 Python
Python发送邮件的实例代码讲解
Oct 16 Python
python数据化运营的重要意义
Nov 25 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 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
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
js实时监听文本框状态的方法
2011/04/26 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
python操作mysql数据库
2017/03/05 Python
Python开发的HTTP库requests详解
2017/08/29 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python deque模块简单使用代码实例
2020/03/12 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
居委会工作总结2015
2015/05/18 职场文书
心术观后感
2015/06/11 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python
使用Apache Camel表达REST服务的方法
2022/06/10 Servers