2017-07-29 63 views
0

我有一個嵌套列表,我需要反轉列表中的每個元素。Python:深度反向列表

下面的例子:

L = [[0, 1, 2], [1, 2, 3]] 

預期輸出:

L = [[3, 2, 1], [2, 1, 0]] 

我試着用下面的一段代碼,它的工作原理單獨但是當我把這個代碼的函數內,則列表沒有得到更新。

L = [list(reversed(row)) for row in L] 

L.reverse() 

此代碼有效,列表「L」正在更新。 但是,當我在功能

def deep_rev(L): 

     L = [list(reversed(row)) for row in L] 
     L.reverse() 

L = [[0, 1, 2], [1, 2, 3]] 

deep_rev(L) 

print(L) 

這把這段代碼被返回相同的list = [[0,1,2],[1,2,3]]

任何人都可以請幫我在這方面,爲什麼在功能,這是不工作?

+1

你需要在你的函數的最後返回列表。否則,函數不會執行任何操作 – user2341726

+0

您正在函數中重新定義L,並且它保留在其中 – PRMoureu

回答

1

使用L = ...您正在爲函數中的參數L分配新值,而不修改原始列表。相反,您可以使用L[:] = ...替換原始列表中的所有元素與新列表中的值。

def deep_rev(L): 
    L[:] = [list(reversed(row)) for row in reversed(L)] 

L = [[0, 1, 2], [1, 2, 3]] 
deep_rev(L) 
print(L) # [[3, 2, 1], [2, 1, 0]] 
0

本規範適用於您的問題,

L = [[0, 1, 2], [1, 2, 3]] 
b=list(reversed(L)) 
q=[] 
for i in b: 
    q.append(list(reversed(i))) 
print q 

輸出: -

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

您需要返回新的列表中你工作,並改寫大號

def deep_rev(L): 
    L = [list(reversed(row)) for row in L] 
    L.reverse() 
    return L 

L = [[0, 1, 2], [1, 2, 3]] 
L = deep_rev(L) 
print(L) 

或使用全局內功能

def deep_rev(): 
    global L 
    L = [list(reversed(row)) for row in L] 
    L.reverse() 

L = [[0, 1, 2], [1, 2, 3]] 
deep_rev() 
print(L) 
1

您當前的代碼創建了一個新列表,而不是修改現有的退出列表。你可以把它的工作,剛剛擺脫了列表理解的,爲內部列表做就地逆轉太:

def deep_rev(L): 
    for inner in L: 
     inner.reverse() 
    L.reverse() 

如果你想支持嵌套的兩個以上的級別,你可以遞歸調用deep_revinner列出,而不是像上面所做的那樣逆轉它們。你需要檢查值是否是列表,所以你會有一個基本情況。

0
def deep_rev(l): 

    l = [list(reversed(row)) for row in l] 
    l.reverse() 
    return l 

l = [[0, 1, 2], [1, 2, 3]] 

l = deep_rev(l) 

print(l) 

輸出

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