我想知道在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