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

Python:如何将未知的多维数组放入一维数组中,python,arrays,multidimensional-array,Python,Arrays,Multidimensional Array,我想知道在python中如何获取多维数组并将其放入1D列表中。这东西有用: 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] 谢谢一种方法是使用递归,类似这样的方法应该可以工作: def flatten_list(l): new_l = [] for item in l: if t

我想知道在python中如何获取多维数组并将其放入1D列表中。这东西有用:

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]


谢谢

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

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

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

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

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
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):
    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
但是,对于大型列表,生成器函数的效率要高得多,因为它在计算下一个值之前不会计算下一个值,这与将其值存储在内存中的列表不同

取自

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

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用于显示生成器。输入可以任意大,这将执行良好。在我的软件(搅拌机…使用python3)。。。我在这种解决方案中遇到了这个错误:“全局名称”集合“未定义为”ops。。。这是我没能导入的模块。但现在的错误是关于“basestring”。@Jean FrancoisGallant您必须使用Python 3。使用
str
而不是
basestring
+1来显示生成器。输入可以任意大,这将执行良好。在我的软件(搅拌机…使用python3)。。。我在这种解决方案中遇到了这个错误:“全局名称”集合“未定义为”ops。。。这是我没能导入的模块。但现在的错误是关于“basestring”。@Jean FrancoisGallant您必须使用Python 3。使用
str
而不是
basestring
。这个看起来很简单!谢谢就因为它没有经过测试就可以正常工作!:)这个看起来很简单!谢谢就因为它没有经过测试就可以正常工作!:)