2014-11-23 59 views
0

的Python代碼Here'a片段:這是Python代碼的正確解釋嗎?

while i > 1: 
    i = i - 1 
    j = randrange(i) # 0 <= j <= i-1 
    items[j], items[i] = items[i], items[j] 
return 

我想在我的帕斯卡項目中使用這種算法。前三行對我來說是絕對清楚的,但是這個程序在第四行代碼中做了什麼?它是否將保留在j上的隨機值分配給數組中的i個插槽,然後向左移動(保持右側的「使​​用」值)?

+0

如果這應該是Fisher-Yates shuffle,那就錯了。它應該是'j = randrange(i + 1)'(所以0 <= j <= i)。 – interjay 2014-11-23 15:15:46

+0

這是Sattolo的算法,是F-Y洗牌的變體。 – rhjs 2014-11-23 15:19:08

回答

1

Python有用於交換的變量整齊的語法:

a,b = b,a 

現在a擁有b的價值,反之亦然。你的程序的第四行就是這樣做的。