Python:深反向列表

时间:2017-07-29 08:37:01

标签: python list

我有一个嵌套列表,我需要反转列表中的每个元素。

以下是示例:

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

预期产出:

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

我尝试使用下面的代码,它可以单独工作,但是当我将此代码放在函数中时,列表没有得到更新。

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

L.reverse()

此代码有效,List" 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]]

任何人都可以在这方面帮助我,为什么功能不起作用?

6 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:1)

您当前的代码会创建一个新列表,而不是修改现有列表。你可以使它工作,只是摆脱列表理解并对内部列表进行就地反转:

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

如果您想支持两个以上的嵌套级别,您可以递归调用deep_rev列表上的inner,而不是像我上面那样只是反转它们。您需要检查值是否为列表,因此您有一个基本案例。

答案 2 :(得分:1)

这是我使用递归找到的解决方案:

l=[[0, 1, 2], [1, 2, 3]]
def treereverse(l):
    l.reverse()
    for x in l:
        if isinstance(x,list):
            treereverse(x)
    return l
print(treereverse(l))

答案 3 :(得分: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]]

答案 4 :(得分: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]]

答案 5 :(得分:0)

deep_rev(L)修改一个本地列表,其范围在此函数内。复制列表的深层副本或返回反向列表。