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中Flask框架简单入门实例
Mar 21 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
详解django2中关于时间处理策略
Mar 06 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
Python中qutip用法示例详解
Oct 02 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
jupyter notebook指定启动目录的方法
Mar 02 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 页面执行时间计算代码
2008/12/04 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
js获取Get值的方法
2016/09/29 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
深入浅析Python传值与传址
2018/07/10 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
python实现动态数组的示例代码
2019/07/15 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Django配置文件代码说明
2019/12/04 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
Python多线程多进程实例对比解析
2020/03/12 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
详解python的变量缓存机制
2021/01/24 Python
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
投标邀请书范文
2014/01/31 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
Mysql排序的特性详情
2021/11/01 MySQL
在js中修改html body的样式
2021/11/11 Javascript