如何更简洁地编写用于扁平化嵌套列表的代码

How to write a code for a flattening of nested lists more concisely

我在一个列表中有一组嵌套列表。

想想这样的数据:

numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]

这完全符合我的要求。但是,它看起来很乱,我相信有更好的方法来做到这一点。谁能帮我格式化这段代码?

list(chain(*chain(*(chain.from_iterable([numberlist1, numberlist2])))))

原创的常用写法:

list(chain.from_iterable(chain.from_iterable(chain(numberlist1, numberlist2))))

创建一个更短的别名:

flat = chain.from_iterable

list(flat(flat(chain(numberlist1, numberlist2))))

列表理解——如果你能选择有意义的名字,效果最好:

[c for a in chain(numberlist1, numberlist2) for b in a for c in b]

f u n c t i o n a l

def repeat(count, f):
    def g(x):
        for i in range(count):
            x = f(x)
        return x
    return g


list(repeat(3, flat)((numberlist1, numberlist2)))

使用 more_itertools.collapse 缩短:

给定

import more_itertools as mit


nlst1 = [[[1, 2]]]
nlst2 = [[[1, 3]]]

代码

list(mit.collapse(nlst1 + nlst2))
# [1, 2, 1, 3]

more_itertools 是第三方包。通过 > pip install more_itertools.

安装