我有一个嵌套列表,我需要反转列表中的每个元素。
以下是示例:
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]]
任何人都可以在这方面帮助我,为什么功能不起作用?
答案 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)
修改一个本地列表,其范围在此函数内。复制列表的深层副本或返回反向列表。