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的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python中return语句用法实例分析
Aug 04 Python
node.js获取参数的常用方法(总结)
May 29 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
python制作抖音代码舞
Apr 07 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python如何基于redis实现ip代理池
Jan 17 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
Django migrate报错的解决方案
May 20 Python
Python 解决空列表.append() 输出为None的问题
May 23 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数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
PHP 万年历实现代码
2012/10/18 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
简明json介绍
2008/09/28 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
python的几种开发工具介绍
2007/03/07 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
初中班主任评语大全
2014/04/24 职场文书
导游词格式
2015/02/13 职场文书
巴黎圣母院观后感
2015/06/10 职场文书