Python:如何将未知的多维数组放入一维数组中
我想知道在python中如何获取多维数组并将其放入1D列表中。这东西有用: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
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
。这个看起来很简单!谢谢就因为它没有经过测试就可以正常工作!:)这个看起来很简单!谢谢就因为它没有经过测试就可以正常工作!:)