Python嵌套列表转一维的方法(压平嵌套列表)


Posted in Python onJuly 03, 2018

前一段去云英面试,技术官很”不厚道“了问了一个非常简单的问题:如何将多维列表转化了一维的?当时虽然想到了使用迭代或者列表生成式可以做到,但是可以没能可行的代码,回来后一顿后悔。

对于规范的且嵌套维度较低的多维列表,python中有很多方法可以实现:

a=[[1,2],[3,4],[5,6]]
print [j for i in li for j in i]
#or
from itertools import chain
print list(chain(*a))
#or
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
#or
a=[[1,2],[3,4],[5,6]]
t=[]
[t.extend(i) for i in a]
print t
#or
a=[[1,2],[3,4],[5,6]]
print sum(a,[])
#or
reduce(lambda x, y: x+ y, a)

对于复杂的多维嵌套列表就需要使用一些复杂的方法:

#递归的方法比较容易理解
def expand_list(nested_list):
  for item in nested_list:
    if isinstance(item, (list, tuple)):
      for sub_item in expand_list(item):
        yield sub_item
    else:
      yield item
      
#在stackoverflow看到大牛的列表生成式版本
func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x]
#生成式的方法还有很多,可以自行摸索

对于使用python2.X的童鞋,还可以使用flatten函数来做:

>>> d=[1,2,3,[4,5],[6,7,[8,9]]]
>>>from compiler.ast import flatten
>>>flatten(a)
[1, 2, 3, 4, 5, 6,7,8,9]

其实上边列举的方法仅仅是冰山一角,大海下的冰山就等这童鞋们自行去寻找挖掘了。

以上这篇Python嵌套列表转一维的方法(压平嵌套列表)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python判断字符串是否包含子字符串的方法
Mar 24 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
python魔法方法-自定义序列详解
Jul 21 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
python实现八大排序算法(2)
Sep 14 Python
详解python中的线程
Feb 10 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
Python代码块及缓存机制原理详解
Dec 13 Python
详解django中Template语言
Feb 22 Python
python如何处理程序无法打开
Jun 16 Python
python飞机大战游戏实例讲解
Dec 04 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 #Python
Pandas 同元素多列去重的实例
Jul 03 #Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 #Python
Python单元测试简单示例
Jul 03 #Python
Python3使用pandas模块读写excel操作示例
Jul 03 #Python
Python+pandas计算数据相关系数的实例
Jul 03 #Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 #Python
You might like
各种快递查询--Api接口
2016/04/26 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python字符串的index和find的区别详解
2020/06/20 Python
给交警的表扬信
2014/01/12 职场文书
扬州个园导游词
2015/02/06 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS