重複のない別のリストからランダムな要素を選択してリストを作成しようとしています。カードのパックをシャッフルすることを考えてください。私は明らかにこれのためにいくつかの非Pythonコードを書くことができましたが、私はしたくありません。
これが私がやろうとしていることです:
new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]
これを行う方法はありますか?
重複のない別のリストからランダムな要素を選択してリストを作成しようとしています。カードのパックをシャッフルすることを考えてください。私は明らかにこれのためにいくつかの非Pythonコードを書くことができましたが、私はしたくありません。
これが私がやろうとしていることです:
new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]
これを行う方法はありますか?
重複のない別のリストからランダムな要素を選択してリストを作成しようとしています。
random.sample(population、k)
母集団シーケンスから選択された一意の要素のak長さリストを返します。置換なしのランダムサンプリングに使用されます。
これを試して:
result = random.sample(deck, n)
リスト全体をシャッフルするには、次を使用しますrandom.shuffle
。
random.shuffle(deck)
ただし、リスト内包表記を使用してこれを実行できるかどうかは、まだ興味があります。
あまり。リスト内包表記は要素の順序を保持しますが、要素を投影したりフィルタリングしたりすることができます。シャッフルは投影やフィルターではありません。
これにはジェネレーターを使用できます。
import random
def pick(deck):
while True:
try:
newCard = random.choice(deck)
deck.remove(newCard)
except:
print 'deck is empty...'
yield newCard
def resetDeck():
deck = []
newCard = None
for i in range(1,53):
deck.append(i)
return deck
pick(deck)はデッキからカードを選び、デッキを再作成したい場合はresetDeck()を使用します。実装後、pick(deck).next()を使用してデッキからカードを選択します。