2012-11-28 63 views
5

我有一種情況,我有時可以嵌套在多個數組層中的數據。最簡單的方法來返回嵌套在多個數組中的數組

有些時候,數據可以被嵌套,如:

[ [ 'green', 'blue', 'red' ] ] 

其他時間

[[[ ['green', 'blue', 'red' ] ]]] 

我想提取數組並返回,這將是這樣做的最Python的方式?

+1

父列表中是否還有其他元素?或者你只是想剝離多餘的嵌套? –

+0

查看http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python –

+1

剝離「嵌套」很容易 - 但我看起來更多要在第一時間即不擁有它,如果無法預料的結果 - 然後有一個缺陷的地方,需要解決...... –

回答

3

numpy的是一直是你最好的朋友:

>>> import numpy as np 
>>> a = [[[ ['green', 'blue', 'red' ] ]]] 
>>> print np.squeeze(a) 
['green' 'blue' 'red'] 

的numpy的功能squeeze()刪除所有維度在你的數組中是1。

+1

不同意'一如既往的你最好的朋友' - 但+1 –

+0

:)爲什麼? Numpy曾經讓你失望過去? –

3
def get_nested_list(a): 
    if len(a) == 1 and isinstance(a[0], list): 
     return get_nested_list(a[0]) 
    return a 

例子:

>>> get_nested_list([[[ ['green', 'blue', 'red' ] ]]]) 
['green', 'blue', 'red'] 
>>> get_nested_list([[[[1, 2],[3]]]]) 
[[1, 2], [3]] 
+0

僅當單個元素嵌套時纔有用。 – asheeshr

+0

@AshRj:現在用一些理智處理多元素列表。 –

+0

我假設第一個測試是檢查空列表?但已經有一個檢查len(a)== 1這將處理空列表。 – asheeshr

0

遞歸解決方案:

def strip(a): 
    if len(a)==1: 
     if isinstance(a[0], list): 
      a=a[0] 
      return strip(a) 
     else: 
      return a 
    return a 
+0

[[1,2],[3,4]? – asheeshr

+0

@AshRj,這種情況下預期的輸出是什麼? –

+0

根據程序的狀態,您可能想要返回第一個列表或第二個列表。 – asheeshr

相關問題