2012-12-07 50 views
1

如何轉換這樣的:壓扁變長數組列表

[2, 4, array([ 3.]), array([ 4.]), array([ 5., 4.])] 

[2,4,3,4,5,4] 

我試圖尋找,但該解決方案

[array([ 2.]), array([ 4.]), array([ 3.]), array([ 4.]), array([ 5., 4.])] 

工作
[[2],[4],[3],[4],[5,4]] 
+0

你有什麼試過? >>> [2,4,array([3。])] Traceback(最近一次調用的最後一個): 文件「」,第1行,在 NameError:name'array'未定義 –

+0

@JohnMee也許'numpy.array'。 – iMom0

+0

@ iMom0嗯,給出[的重複?](http://stackoverflow.com/questions/13745090/python-list-to-array)你可能是對的。仍然敲擊他的鼓,但是......你想幫助他嗎? –

回答

1
import itertools 

a = [2, 4, array([ 3.]), array([ 4.]), array([ 5., 4.])] 
list(itertools.chain.from_iterable(asarray(b).ravel() for b in a)) 
0

我喜歡用sum來展平東西。在你的情況下,你首先需要將數組轉換爲列表,並將數字轉換爲數字列表。因此,如果陣列在:

sum((list(x) if hasattr(x, '__iter__') else [x] for x in a), []) 
+1

如果你有很多元素需要處理,這將會非常緩慢。在總結中的每一步中,都會分配一個新列表,其中包含迄今爲止所看到的所有元素。最終結果是元素數量最差的O(n ** 2)時間。 –

+0

不成熟的優化。如果長名單上的表現是需要的話,他會這樣說的。與解決方案相比,我的解決方案更通用,更易於閱讀並維護。儘管如果存在很多元素的可能性,你的確會更好。 – Gurgeh