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多线程编程(八):使用Event实现线程间通信
Apr 05 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
快速了解Python相对导入
Jan 12 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
python删除文本中行数标签的方法
May 31 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
Pytorch 使用CNN图像分类的实现
Jun 16 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
php入门教程 精简版
2009/12/13 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
python读取文件名并改名字的实例
2019/01/07 Python
python扫描线填充算法详解
2020/02/19 Python
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
称象教学反思
2014/02/03 职场文书
承诺书的格式范文
2014/03/28 职场文书
七夕情人节促销方案
2014/06/07 职场文书
三好生演讲稿
2014/09/12 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
先进工作者申报材料
2014/12/23 职场文书
小学中等生评语
2014/12/29 职场文书
实施意见格式范本
2015/06/05 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫