我有這個問題,我根據隨機性排序列表。算法的工作原理是兩個選擇一個介於0到N-1之間的隨機數(N是列表的長度)並與迭代索引交換。奇怪的輸出使用隨機python
我有這樣的兩種不同的算法。
import random
def algo1(xx):
for i in xrange(len(xx)):
p = random.randrange(i, len(xx)) # random number between i and len(xx) - 1
xx[i], xx[p] = xx[p], xx[i]
return xx
def algo2(yy):
for i in xrange(len(yy)):
p = random.randrange(0, len(yy)) # random number between 0 and len(xx) - 1
yy[i], yy[p] = yy[p], yy[i]
return yy
k = range(5)
print algo1(k)
print algo2(k)
這裏一切工作正常。我打印來自algo1和algo2的返回值。
但是,當我返回值存儲在變量
z1 = algo1(k)
z2 = algo2(k)
print z1
print z2
它們都包含相同的列表。多少次,我跑,他們表現出同樣的返回值
看到這部影片https://www.youtube.com/watch?v=ZBjlnaCLKsQ&feature=youtu.be
我不明白你在做什麼,範圍(5)被傳遞給你的函數。 for循環的取值範圍(5)僅爲5,所以你的循環可能是'for xrange(5)':' –
在調用之間移動print z1,它再次工作......沒有認真, 'assert id(z1)== id(z2)'會顯示,這些名字指向同一個列表,因此只保留最後一次修改。更改函數或將它們包裝在列表構造函數中,例如:'z1 = list(algo1(k))'或者製作一個像z1 = algo1(k)[:]'這樣的方法 - 這些方法應該能夠確定原因或症狀; - ) – Dilettant