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下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
python简单贪吃蛇开发
Jan 28 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
python命令 -u参数用法解析
Oct 24 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
python 如何用terminal输入参数
May 25 Python
Python os和os.path模块详情
Apr 02 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
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
Node.js学习入门
2017/01/03 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
python基础教程之Hello World!
2014/08/29 Python
python实现简单的TCP代理服务器
2014/10/08 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Python实现Linux中的du命令
2017/06/12 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Python编写一个优美的下载器
2018/04/15 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
工商管理专业职业生涯规划
2014/01/01 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
2016年情人节广告语
2016/01/28 职场文书
五年级语文教学反思
2016/03/03 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS