[英]List comprehension without using an iterable
我試圖通過從另一個列表中選擇隨機元素來建立一個列表,沒有重復。 想想洗牌一副牌。 我顯然可以為此編寫一些unpythonic代碼,我不想這樣做。
所以這就是我想要做的:
new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]
有沒有辦法做到這一點?
我試圖通過從另一個列表中選擇隨機元素來建立一個列表,沒有重復。
使用random.sample
:
random.sample(population,k)
返回從總體序列中選擇的獨特元素的長度列表。 用於無需更換的隨機抽樣。
嘗試這個:
result = random.sample(deck, n)
要隨機播放整個列表,請使用random.shuffle
:
random.shuffle(deck)
仍然很好奇,如果這可以使用列表理解完成!
並不是的。 列表comphrension保留元素的順序,但允許您投影或過濾它們。 改組不是投影或過濾器。
您可以使用生成器:
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()從牌組中選擇牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.