2015-06-20 62 views
-2

我有一個壓縮列表一樣(也可能更大):如何在Python中將壓縮列表擴展爲完整列表?

[[[1, [2, 3], [3, 2]]], [[2, [1, 3], [3, 1]]], [[3, [1, 2], [2, 1]]]] 

我能做些什麼,以擴大到像一個完整的清單?

[[1,2,3], [1,3,2], [2,1,3], [3,1,2], [2,3,1], [3,2,1]] 

我認爲這是某種遞歸,但我不知道如何。 謝謝你提前

編輯:這是我已經寫了一個函數,但它一直說語法錯誤。

def expandList(aList): 
    """expand a list""" 

    finalList = [] 

    for j in aList: 

     if type(j) != type(list): 
      tempList = [] 
      tempList.append(j) 

      finalList.append(tempList) 

     else: 
      finalList.extend(expandList(j)) 

    return finalList 

編輯:哎呀,我的意思是:

[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 

不是:

[[1,2,3], [1,3,2], [2,1,3], [3,1,2], [2,3,1], [3,2,1]] 

對不起任何混亂。

+7

你能解釋一下你如何得到輸入的輸出嗎? –

+0

我以爲我有一個處理你想要的東西,但你的輸出不是按照我預期的順序。請擴展你想要做的事情。 – TigerhawkT3

+1

爲什麼每個子列表都包含一個嵌套的子列表? – TigerhawkT3

回答

1

你可能想試試這個,

l = [[[1, [2, 3], [3, 2]]], [[2, [1, 3], [3, 1]]], [[3, [1, 2], [2, 1]]]] 
final_list = [] 
for k in l: 
    for x in k: 
     t = [x[0]] 
     t.extend([i for i in x[1]]) 
     final_list.append(t) 
     t = [x[0]] 
     t.extend([i for i in x[2]]) 
     final_list.append(t) 
print (final_list) 

這個產量,

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 
+0

而不是'[i for i in x [1]]',你是否嘗試過簡單的'x [1]'(對於'x [2]')?它看起來已經是一個'list'了,所以你不必生成一個新的。 – TigerhawkT3

1

假設你列出的確切的輸入結構,具有冗餘list S:

big = [[[1, [2, 3], [3, 2]]], [[2, [1, 3], [3, 1]]], [[3, [1, 2], [2, 1]]]] 
>>> [[a]+i for useless in big for a, *b in useless for i in b] 
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 

假設清潔輸入結構無冗餘list s:

>>> big = [[1, [2, 3], [3, 2]], [2, [1, 3], [3, 1]], [3, [1, 2], [2, 1]]] 
>>> [[a]+i for a, *b in big for i in b] 
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 
+0

List comprehension..awesome +1! –