我想在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]
感谢
答案 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
我没有测试这段代码,但想法就在那里。