2012-10-15 163 views
0

我要弄平名單:拉平列表蟒蛇

exampleArray = [[[151.68694121866872]], 
       [[101.59534468349297]], 
       [[72.16055999176308]]] 

到:

[151.68694121866872, 101.59534468349297, 72.16055999176308] 

現在我這樣做:

resultArray= list(chain.from_iterable(list(chain.from_iterable(exampleArray)))) 

即使它的作品,我想知道是否有更好的方法。

+0

是什麼'chain.from_iterable( )'? –

+0

它是['itertools.chain.from_iterable'](http://docs.python.org/library/itertools.html#itertools.chain.from_iterable)。 –

+2

我想那麼只是'list(chain.from_iterable(chain.from_iterable(lis)))'就夠了,不需要那個'list()'調用。 ' –

回答

2

如何

result = [x[0][0] for x in exampleArray] 
+0

非常好的具體示例。顯然,不是最好的一般。 –

1
In [6]: from itertools import chain 

In [7]: lis=[[[151.68694121866872]], [[101.59534468349297]], [[72.16055999176308]]] 

In [8]: list(chain(*(chain(*lis)))) 

Out[8]: [151.68694121866872, 101.59534468349297, 72.16055999176308] 
1

沒有更好的辦法,這是最值得推薦的方式。見official recipes

​​
+0

謝謝你只是想看看是否會刪除我添加到代碼中的額外列表 – user1741339

1

你不需要到itertools.chain對象(迭代器)轉換成一個列表:

resultArray= list(chain.from_iterable(list(chain.from_iterable(exampleArray)))) 
# could be rewritten as 
resultArray= list(chain.from_iterable(chain.from_iterable(exampleArray))) 

你可以使用遞歸寫一個深度功能:

def deep_chain_from_iterable(it, n): 
    if n == 0: 
     return list(it) 
    else: 
     return deep_chain_from_iterable(itertools.chain.from_iterable(it),n-1) 

deep_chain_from_iterable(exampleArray, 2) 
0

對於深度的固定水平(例如)可以只總結足夠的時間:

sum(sum(listoflistsoflists, []), [])