如何在python中将一个列表的列表压缩成单个列表?

bal*_*lki 4 python list flatten

我有一个对象列表,其中对象可以是列表或标量.我想要一个只有标量的扁平列表.例如:

L = [35,53,[525,6743],64,63,[743,754,757]]
outputList = [35,53,525,6743,64,63,743,754,757]
Run Code Online (Sandbox Code Playgroud)

PS此问题的答案不适用于异构列表.在Python中展平浅层列表

Nic*_*ood 8

这是一个相对简单的递归版本,它将展平任何深度的列表

l = [35,53,[525,6743],64,63,[743,754,757]]

def flatten(xs):
    result = []
    if isinstance(xs, (list, tuple)):
        for x in xs:
            result.extend(flatten(x))
    else:
        result.append(xs)
    return result

print flatten(l)
Run Code Online (Sandbox Code Playgroud)


nye*_*e17 5

它可以在一行中使用 numpy

import numpy as np
np.hstack(l)
Run Code Online (Sandbox Code Playgroud)

你最终得到了一个 ndarray

array([  35,   53,  525, 6743,   64,   63,  743,  754,  757])
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 5

>>> data = [35,53,[525,6743],64,63,[743,754,757]]
>>> def flatten(L):
        for item in L:
            if isinstance(item,list):
                for subitem in item:
                    yield subitem
            else:
                yield item


>>> list(flatten(data))
[35, 53, 525, 6743, 64, 63, 743, 754, 757]
Run Code Online (Sandbox Code Playgroud)

这是用于代码高尔夫目的的单行版本(看起来不太好:D)

>>> [y for x in data for y in (x if isinstance(x,list) else [x])]
[35, 53, 525, 6743, 64, 63, 743, 754, 757]
Run Code Online (Sandbox Code Playgroud)