压平列表

发布时间:2017-7-9 7:27:05编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"压平列表 ",主要涉及到压平列表 方面的内容,对于压平列表 感兴趣的同学可以参考一下。

碾平列表是个很好玩的函数。比如你有个嗷嗷恶心的列表:

[[1, 2], [3, [4], [5, 6], 7], 8]

你想把它变成正常一点的

[1, 2, 3, 4, 5, 6, 7, 8]

要怎么办呢?

老实说,很久不接触这种东西,我已经早忘了当初是怎么写的了,憋了半天没写出来,后来参考了 http://www.cnblogs.com/c-hy/archive/2012/09/21/2696703.html 才回忆起来。

然后,着重介绍三种方法:

1、使用sum和map,感觉玩的比较炫,大家来感受一下:

from collections import Iterable


def flatten(x):
    if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
        return sum(map(flatten, x), [])
    else:
        return [x]


lst = [1, 2, [3, [4], [5, 6], 7], 8]
print(flatten(lst))

刚才那个网页中说,国外某论坛的大神写了一个匿名函数

flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]

基本上是一个意思的。

2、使用yield。这个是在《Python Cookbook》中介绍的一种方法

from collections import Iterable


def flatten(items, ignore_types=(str, bytes)):
    for x in items:
        if isinstance(x, I