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中编写并发程序
Feb 27 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
分析python请求数据
Aug 19 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
简单分析python的类变量、实例变量
Aug 23 Python
python之列表推导式的用法
Nov 29 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Pycharm修改python路径过程图解
May 22 Python
在keras里实现自定义上采样层
Jun 28 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
python爬取网页版QQ空间,生成各类图表
Jun 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
URL Rewrite的设置方法
2007/01/02 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
微信小程序的授权实现过程解析
2019/08/02 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
浅析Python数据处理
2018/05/02 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
简单了解如何封装自己的Python包
2020/07/08 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
高二英语教学反思
2014/01/19 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
学习保证书范文
2014/04/30 职场文书
销售目标责任书
2014/07/23 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python