這個問題在這里已經有了答案: 如何在不替換的情況下增量采樣? (13 個回答) 3 小時前關閉。
假設我有一組 54 張卡片。
我想進行 2 張卡片的初始分發。
然后,我想重新分配 3 張卡片,但是這三張新卡片必須與最初分發的 2 張卡片不同。
等等...
在全球范圍內,在每次分發時,分發的卡片都來自 52 張卡片組。每次發行版都會更新 52 張牌。
這是我的代碼,但盡管進行了大量研究,但我對 Python 的了解還不夠深入,無法找到解決方案。
import random
cards = ["2 coeur", "3 coeur", "4 coeur", "5 coeur", "6 coeur", "7 coeur", "8 coeur", "9 coeur", "10 coeur", "Valet coeur", "Dame coeur", "Roi coeur", "A1 coeur",
"2 trèfle", "3 trèfle", "4 trèfle", "5 trèfle", "6 trèfle", "7 trèfle", "8 trèfle", "9 trèfle", "10 trèfle", "Valet trèfle", "Dame trèfle", "Roi trèfle", "A1 trèfle",
"2 carreau", "3 carreau", "4 carreau", "5 carreau", "6 carreau", "7 carreau", "8 carreau", "9 carreau", "10 carreau", "Valet carreau", "Dame carreau", "Roi carreau", "A1 carreau",
"2 pique", "3 pique", "4 pique", "5 pique", "6 pique", "7 pique", "8 pique", "A9 pique", "10 pique", "Valet pique", "Dame pique", "Roi pique", "A1 pique"]
first_card = (random.choices(cartes, k = 1))
second_card = (random.choices(cartes, k = 1))
first_distri = first_card second_card
print(first_distri)
second_distri = (random.choices(cartes, k = 3)) #AND ????
例如,我想到了一個需要“exept”的命令:
second_distri = (random.choices(cartes, k = 3)) EXCEPT first_distri.
但我不確定它是否存在。
我嘗試了不同的東西,if/else但沒有任何效果。
uj5u.com熱心網友回復:
您可以使用以下命令洗掉已從串列中選擇的卡片:
cards.remove(first_card)
cards.remove(second_card)
或者,根據您的“除外”(設定減法-y)思路:
second_distri = (random.sample([card for card in cartes if card not in first_distri], k = 3))
sample在這里使用而不是按照choices@Tomerikoo 的建議使用,以避免兩次選擇同一張卡。
還注意到@Tomerikoo 的建議:此方法需要對串列進行多次迭代(一次選擇帶有 的卡片choices,然后再選擇一次remove),因此更有效的解決方案是對串列進行洗牌(使用模塊的shuffle功能random) ,選擇它的第一個(或最后一個)元素,然后將包含這些元素的部分切片。
uj5u.com熱心網友回復:
初始化 first_card 后,將其從串列中洗掉,然后是第二個,依此類推
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394643.html
標籤:Python
