card_list =
for i in
range(1
,55):
card_list = copy.deepcopy(card_list)
# 為保證原資料不被改變,對原列表進行深拷貝乙份
for i in
range(1
,54):
index = random.randint(i,54)
card_list[i-1]
, card_list[index]
= card_list[index]
, card_list[i-
1]
實現方式如下:
第一次隨機到 10 – > [10, 2, 3, …, 9, 1, 11, …, 54]
第二次隨機到 21 --> [10, 21, 3, …, 9, 1, 11, …20, 2, 22, …,54]
······
依次類推,完成洗牌
注:經測試,一般洗7次得到的牌效果是最好。
除了以上的方法還有另一種,因為效率較低,所以不推薦使用
result =
for i in
range(54
):index = random.randint(i,54)
) card_list.pop(index)
撲克洗牌演算法
最近看到了遇到面試題,內容是以最快的方法將一副撲克牌重洗?覺得挺有意思,總結了三種方法,下面的的 是用js,呵呵,下面是 functionshuffle 洗牌方法1 this.shuffle1 function returnarr3 最簡單粗暴的一種方法 this.shuffle2 function...
撲克牌洗牌演算法 random shuffle
撲克牌洗牌有多種演算法 第1個 每次從原陣列a取出範圍 1,i 的數放入b陣列。缺點是每次都要將陣列i後面的元素進行移動。是乙個o n2 演算法 void xipai int n n for int i 1 i x i 第2種 每次取範圍 1,i 1 的數,然後與最後乙個元素做交換。這樣的複雜度優化...
洗牌演算法(打亂撲克牌順序)
問題描述 有乙個大小為 n 的有序陣列,如何打亂元素順序,使得任一元素在陣列的任一位置出現的概率都為 1 n?也就是說對於大小為 n 的有序陣列,有 n!種排列方式,要求能等概率的得到這 n!種結果。思路一 每次從原始陣列中隨機取乙個之前未取過的元素,新增到新陣列中。選取方法是 生成乙個 1 rem...