我想通过从另一个列表中选择没有重复的随机元素来构建一个列表。想洗牌一副牌。我显然可以为此写一些unpythonic代码,我不想这样做。没有使用迭代的列表理解
因此,这里是我想做的事:
new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]
有没有办法做到这一点?
我想通过从另一个列表中选择没有重复的随机元素来构建一个列表。想洗牌一副牌。我显然可以为此写一些unpythonic代码,我不想这样做。没有使用迭代的列表理解
因此,这里是我想做的事:
new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]
有没有办法做到这一点?
我想通过从另一个列表中选取无重复的随机元素来构建一个列表。
random.sample(人口中,k)从所述总体序列选择独特元件的
返回第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
选秀权(甲板)主从甲板上的卡,如果你想重新甲板使用resetDeck()。 执行后,使用pick(deck).next()从卡组中选择卡。
'random.shuffle()'怎么样? – alexvassel
对于初学者来说,定义执行次数是多少? – delnan
@alexvassel FFFFUUUUU。虽然谢谢!仍然好奇,如果这可以使用列表理解虽然! – ritratt