函式回圈洗掉串列的第一個元素,將其放在最后一個位置。我使用 pop 和 append 來做到這一點。問題是,如果您使用:
l=[1,2,3]
assert(cycle(l)== [2,3,1])
assert(cycle(cycle(l))== [3,1,2])
它給你一個斷言錯誤,所以我想也許這個串列是全域更改的,但我不希望這樣,我找不到解決方案。我是編程新手。
l=[1,2,3]
def cycle(y):
x=y.pop(0)
y.append(x)
return (y)
assert(cycle(l) == [2, 3, 1])
assert(cycle(cycle(l)) == [3, 1, 2])
assert(l == [1, 2, 3])
我嘗試通過使用 y 的副本在之后重置函式中的串列來稍微更改我的代碼,但似乎也不起作用。也許我只是做錯了。
l=[1,2,3]
def cycle(y):
z=y.copy
x=y.pop(0)
y.append(x)
return (y)
y=z
assert(cycle(l) == [2, 3, 1])
assert(cycle(cycle(l)) == [3, 1, 2])
assert(l == [1, 2, 3])
uj5u.com熱心網友回復:
嗯,這是因為Python確實將指標傳遞給串列,它不會創建自己的副本。所以,你可以簡單地使用這個:
from copy import deepcopy
cycle(deepcopy(l))
因此,您的串列不會在全球范圍內更改。
uj5u.com熱心網友回復:
print(cycle(l))
print(cycle(cycle(l)))
print(l)
assert(cycle(l) == [2, 3, 1])
assert(cycle(cycle(l)) == [1, 2, 3])
assert l == [1, 2, 3]
我認為您需要更新第二個斷言預期輸出。
當你再次將它傳遞給它時cycle(l)呼叫 return它將回傳。[3,2,1]cycle(cycle(1))[1,2,3]
uj5u.com熱心網友回復:
使用 deepcopy 而不是復制并使用復制的物件進行播放
from copy import deepcopy
l=[1,2,3]
def cycle(y):
z=deepcopy(y)
x=z.pop(0)
z.append(x)
return (z)
assert(cycle(l) == [2, 3, 1])
assert(cycle(cycle(l)) == [3, 1, 2])
assert(l == [1, 2, 3])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530876.html
標籤:Python列表
上一篇:回傳與字串匹配的單詞串列的頻率
