def deep_reverse(L) :
for i in range (len(L)-1,-1,-1):
L=L[::-1]
for i in range (len(L)-1,-1,-1):
L[i]=L[i][::-1]
L = [[0, 1, 2], [1, 2, 3], [3, 2, 1], [10, -10, 100]]
deep_reverse(L)
print(L)
所以我在这里有这段代码和一个名为 deep_reverse(L) 的函数。我试图改变列表 L,最后当我 print(L)
它打印出 L = [[0, 1, 2], [1, 2, 3], [3, 2, 1], [10, -10, 100]]
。但是,当我从函数内部打印时,我得到 L= [[2, 1, 0], [3, 2, 1], [1, 2, 3], [100, -10, 10]]
,这正是我想要的。我怎样才能永久改变 L 以便在我在函数外打印它时保持这种状态。
答案 0 :(得分:2)
你没有改变任何东西。该函数创建一个新列表并将其分配回局部变量,这对调用者的变量没有影响。
此外,您的第一个 <div class="box">
</div>
<div class="box" style="--p1_start:80px;--p1_end:100px;--p2_start:120px;--p2_end:200px;">
</div>
循环反复反转 for
。如果列表有偶数个元素,则将其反转回原来的顺序。
使用切片分配就地修改列表。
L
另请注意,您的代码仅反转两层深。使用递归处理任何深度。
def deep_reverse(L):
L[:]=L[::-1]
for i in range (len(L)-1,-1,-1):
L[i][:]=L[i][::-1]
答案 1 :(得分:0)
问题在于通过调用 $token ='\"cbfddd256d9b5c5235f587415188ce2e36101c0c3269b6db398d4f53ad35898a\"';
preg_match('/[A-Za-z0-9]+/', $token, $matches);
print_r($matches); // Array ( [0] => cbfddd256d9b5c5235f587415188ce2e36101c0c3269b6db398d4f53ad35898a )
为 L 分配了一个新数组,并且不会覆盖传递给函数的数组。为此,您需要使用将新值分配为 L = L[::-1]
。
这样你的函数就变成了:
L[:] = L[::-1]
此外,我假设您希望反转单个元素,因此您不需要第一个 for 循环。
答案 2 :(得分:0)
就这么简单 - 就是尽量减少对代码的更改: (删除第一个循环 - 因为没有效果;并添加 return 语句)所有就地更改。
def deep_reverse(L):
for i in range(len(L)-1, -1, -1):
L[i] = L[i][::-1]
return L
L = [[0,1,2], [1,2,3], [3,2,1], [10,-10,100]]
LL = deep_reverse(L)
print(LL) # [[2, 1, 0], [3, 2, 1], [1, 2, 3], [100, -10, 10]]
答案 3 :(得分:0)
你说过如果 L = [[0, 1, 2], [1, 2, 3], [3, 2, 1], [10, -10, 100]]
你
想要结果 L = [[2, 1, 0], [3, 2, 1], [1, 2, 3], [100, -10, 10]]
。
基于Barmar's answer,您可以这样做:
def deep_reverse(L):
for subL in L:
subL[:] = subL[::-1]
>>> L = [[0, 1, 2], [1, 2, 3], [3, 2, 1], [10, -10, 100]]
>>> deep_reverse(L)
>>> L
[[2, 1, 0], [3, 2, 1], [1, 2, 3], [100, -10, 10]]