我如何从两个列表中进行UNIQUE随机选择

问题描述 投票:0回答:2

我有两个定义卡片的列表

values  =  ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']
marks   =  ['spade', 'hearts', 'diamond', 'club']

我想拥有12张unique卡,所以我的输出应该看起来像

('9', 'diamond')
('K', 'hearts')
('Q', 'hearts')
('7', 'spade')
('A', 'diamond')
('3', 'diamond')
('Q', 'diamond')
('3', 'hearts')
('7', 'hearts')
('2', 'diamond')
('2', 'hearts')
('5', 'spade')

我使用随机选择来达到这个目的,我的代码在这里

count = 0
while count != 12:
    value = random.choice(values)
    mark = random.choice(marks)
    card = Card(value, mark) 
    # I have a class named Card, generate() returns a tuple of mark and value for card
    print(card.generate())
    count += 1

但是它不能为我提供独特的价值。请让我知道或通过我的资源来学习如何通过随机选择从两个列表中获得唯一的价值。

python random
2个回答
2
投票
首先,使用marksvaluesitertools.product合并为实际的纸牌,然后像现实生活中一样,将random.shuffle一叠纸牌和pop纸牌放入玩家的手中。

import itertools, random cards = list(itertools.product(values, marks)) random.shuffle(cards) hand = [cards.pop() for _ in range(12)]

同时,这将从堆叠中移除卡牌,并因此确保卡牌在不同玩家的手中是唯一的。如果您不想这样做,请改用random.sample。这样,卡就可以在一只手中唯一,但在两手之间却不一样,因为它们仍在堆栈中:

hand = random.sample(cards, 12)


0
投票
我建议使用random.sample(population, k),这将从列表k中返回唯一的population项目。
© www.soinside.com 2019 - 2024. All rights reserved.