我想知道在 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 中如何获取多维数组并将其放入一维列表中。这件事有效:
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(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_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
我没有测试这段代码,但想法就在那里。