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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java .foreach数组遍历_foreach遍历ArrayList和数组

    java .foreach数组遍历_foreach遍历ArrayList和数组遍历ArrayList的方式有迭代器,foreach循环,get(i)等方式。其中迭代器和get方法都有具体的代码可以看到。foreach循环是怎么实现的呢?下面通过反编译class的方式来看看JAVA是如何处理foreach遍历ArrayList、数组的。先说结论:foreach遍历list底层还是使用的迭代器;foreach遍历数组还是传统的i=0到i=length-1遍历,只是写法上封装成f…

  • matlab是fmincon,matlab中fmincon

    matlab是fmincon,matlab中fmincon标签:fmincon|MATLAB非线性优化fmincon_数学_自然科学_专业资料。MATLAB非线性优化函数fmincon的详细整理active-setandsqpalgorithms不接受用户提供的海塞矩阵……精品Matlab优化函数fmincon1.fmincon是一种局部优化…很多人只知道用matlab中的fmincon函数,却不清楚它的真正意思,…

  • 如何查看mac系统是32位还是64位的操作系统

    如何查看mac系统是32位还是64位的操作系统

  • redis的lettuce_redis客户端lettuce

    redis的lettuce_redis客户端lettuce1、Jedis优点:提供了比较全面的Redis操作特性的APIAPI基本与Redis的指令一一对应,使用简单易理解缺点:同步阻塞IO不支持异步线程不安全2、Lettuce优点:线程安全基于Netty框架的事件驱动的通信,可异步调用适用于分布式缓存缺点:API更抽象,学习使用成本高…

  • asp.net(c#)的货币格式化

    asp.net(c#)的货币格式化

  • hostapd.conf详细

    hostapd.conf详细#####hostapdconfigurationfile###############################################Emptylinesandlinesstartingwith#areignored#APnetdevicename(without’ap’postfix,i.e.,wlan0useswlan0a…

发表回复

您的电子邮箱地址不会被公开。

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