0

我想知道在 python 中如何获取多维数组并将其放入一维列表中。这件事有效:

a = [[1,2],[3,4]]
sum(a,[])

我明白了:[1,2,3,4]

但是,如果我有一个维度未知或维度不恒定的多维:

a = [1,[3,4,[5,6,7]]]

如何得到这个:[1,2,3,4,5,6,7]

谢谢

4

2 回答 2

3
def flatten(lis):
    for i in lis:
        if isinstance(i, collections.Iterable) and not isinstance(i, basestring):
            for sub in flatten(i):
                yield sub
        else:
            yield i

取自克里斯蒂安这个问题的解决方案

如果你想返回一个列表,你可以使用这个:

def flatten(lis):
    flat_list = []
    for i in lis:
        if isinstance(i, collections.Iterable) and not isinstance(i, basestring):
            flat_list.extend(flatten(i))
        else:
            flat_list.append(i)
    return flat_list

然而,对于大列表,生成器函数效率更高,因为它在计算下一个值之前不会计算下一个值,这与将其值存储在内存中的列表不同。

于 2013-01-10T02:35:04.413 回答
1

一种方法是使用递归,这样的事情应该可以工作:

def flatten_list(l):
    new_l = []
    for item in l:
        if type(item) == type([]):
            new_l += flatten_list(item)
        else:
            new_l.append(item)
    return new_l

我没有测试这段代码,但想法就在那里。

于 2013-01-10T02:34:31.763 回答