Python:如何将未知的多维数组放入一维数组中

时间:2013-01-10 02:24:24

标签: python arrays multidimensional-array

我想在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]

感谢

2 个答案:

答案 0 :(得分: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

取自Christian's solution上的this question

如果要返回列表,可以使用:

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

但是,对于大型列表,生成器函数效率要高得多,因为它不会计算下一个值,直到它也是如此,而不像将值存储在内存中的列表。

答案 1 :(得分: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

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