python压平嵌套列表

python压平嵌套列表

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()]

不过,这种做法对于列表中出现包含”[“或”]”的字符串时就无能为力了,需要改进。

 

出处:http://www.cnblogs.com/c-hy/archive/2012/09/21/2696703.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119570.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 手机卫士-12_下载百度手机卫士

    手机卫士-12_下载百度手机卫士手机卫士-12课1手机杀毒模块杀毒原理:1、什么是病毒:特殊的程序,存在在硬盘里面。-如何定义计算机病毒:1、侵犯用户的隐私,偷窃你的私隐数据2、盗号,偷钱。(特洛伊,木马)灰鸽子3、恶意程序,危害设备前提:在用户不知情的情况下安装,在特殊的情况下出发。红蜘蛛,灰鸽子2、如何杀毒?把硬盘上的病毒程序,文件删除掉删除问题:1、不知

    2022年9月23日
  • 图解快速排序(C++实现)

    图解快速排序(C++实现)参考大话数据结构这本书对快速排序的讲解,本文作一个梳理,并在最后给出快排的C++实现代码。假设我们现在对“61279345108”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基…

    2022年7月15日
  • 快递查询API接口集成,有需要的可以直接用

    快递查询API接口集成,有需要的可以直接用

    2021年10月26日
  • return 补充部分

    return 补充部分

    2021年9月27日
  • java代码编写九九乘法表

    java代码编写九九乘法表publicclassDemo{publicstaticvoidmain(String[]args){for(inti=0;i<9;i++){//控制九九乘法表的行数,9行for(intj=0;j<i+1;j++){//控制九九乘法表每一行的列数,i+1列System.out.print((j+1)+”*”+(i+1)+”=”+(j+1)*(i+1)+””);.

    2022年7月25日
  • phpstrom2021激活码【注册码】

    phpstrom2021激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号