我想知道在Python中如何获取多维数组并将其放入一维列表中。这件事的工作: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]
感谢
我想知道在Python中如何获取多维数组并将其放入一维列表中。这件事的工作: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]
感谢
一种方法是使用递归,这样的事情应该工作:
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
从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显示发电机。输入可以任意大,这将表现良好。 –
在我的软件(Blender ...使用python3)...我得到这种错误,这种解决方案:“全球名称”收集“没有定义” –
ops ...这是我错过了一个模块导入。但现在错误是关于“basestring”。 –
可能重复:http://stackoverflow.com/q/2158395/1907098 – Volatility