我試圖在函式中輸入一個串列,然后輸出將是串列,然后將串列的反向添加到自身上,但出于某種原因,每當我反轉變數反轉時,它也會反轉串列
def mirror(list):
reversel = list
reversel.reverse()
list.extend(reversel)
return list
test = ["alpha", "beta"]
print(mirror(test))
輸出
['beta', 'alpha', 'beta', 'alpha']
期望的輸出
["alpha","beta","beta","alpha"]
uj5u.com熱心網友回復:
您可以使用切片:
def mirror(lst):
return lst lst[::-1]
test = ["alpha", "beta"]
print(mirror(test)) # ['alpha', 'beta', 'beta', 'alpha']
在所提供的代碼的問題是,(我)reversel = list(但不使用list的名稱),并不能復制的物件,及(ii)reverse()反轉串列到位。因此,這兩行代碼反轉了串列list(以及reversel)。結果,現在list和reversel 兩者都是["beta", "alpha"]。之后list.extend(reversel),list變成你所觀察到的。
此外,還有一個微妙的問題;通常不建議同時執行以下兩種操作:(i) 修改給定物件,以及 (ii) 回傳物件;這可能會引起混亂(我相信)。最好只做其中之一;就地修改物件(如reverse),或者不修改物件但回傳物件的修改副本(如reversed)。
uj5u.com熱心網友回復:
這應該有效 -
def mirror(list):
reversel = [i for i in list]
reversel.reverse()
list.extend(reversel)
return list
test = ["alpha", "beta"]
print(mirror(test))
使用 '=' 時,它存盤變數的位置。所以當使用像 reverse 這樣的函式時,兩個值都會改變。
uj5u.com熱心網友回復:
這是一個不使用reverse().
def mirror(list_to_mirror):
reversel = list_to_mirror
reversel = reversel[::-1]
#This is an equivilant to reverse()
list_to_mirror.extend(reversel)
return list_to_mirror
if __name__ == "__main__":
test = ["alpha", "beta"]
print(mirror(test))
uj5u.com熱心網友回復:
一種不需要創建和丟棄副本的方法:
def mirror(lst):
lst = reversed(lst)
return lst
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/371039.html
上一篇:為什么這個用于替換檔案中文本的Python腳本會破壞最后一個檔案?[復制]
下一篇:Python遞回函式引數問題
