2017-07-29 61 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]