Python 在卡片列表中选择多个随机项

Python 在卡片列表中选择多个随机项,python,random,Python,Random,我想从同一个列表中有两个独立的随机选择。有没有办法做到这一点,不包括单独列出清单 import random cards = [2,3,4,5,6,7,8,9,10,'King','Queen','Jack'] cards = random.choice(cards) suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds'] suits = random.choice(suits) first_card = ("your first card i

我想从同一个列表中有两个独立的随机选择。有没有办法做到这一点,不包括单独列出清单

import random


cards = [2,3,4,5,6,7,8,9,10,'King','Queen','Jack']
cards = random.choice(cards)

suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds']
suits = random.choice(suits)

first_card = ("your first card is the {} of {}") .format(cards,suits)
second_card = ("your second card is the {} of {}") .format(cards,suits)

print first_card
print second_card
输出
我希望输出相同,但最后一张牌与第一张牌不同;两张独立的卡

这保证了每次使用不同的卡:

from random import randint
cards = [2,3,4,5,6,7,8,9,10,'King','Queen','Jack']
first_card = cards[randint(0, len(cards)-1)]
second_card = cards[randint(0, len(cards)-1)]
while second_card == first_card:
   second_card = cards[randint(0, len(cards)-1)]
print first_card
print second_card

事先,通过示例和列表,从人物和套装生成所有卡片。然后使用
random.sample
选择两张随机卡

import random

figures = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'King', 'Queen', 'Jack']
suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds']

cards = [(figure, suit) for figure in figures for suit in suits]

print(random.sample(cards, 2)) # [(5, 'Hearts'), (7, 'Diamonds')]

尽管如此,我建议您不要混合使用整数和字符串来定义数字,因为这可能会导致一些混淆。我建议您将整数
11
12
13
分别分配给
Jack
Queen
King

使用
random.sample

随机。样本(总体,k)

返回从总体序列或集合中选择的唯一元素的
k
长度列表

import random

cards = [2,3,4,5,6,7,8,9,10,'King','Queen','Jack']
chosen_cards = random.sample(cards,2)

suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds']
chosen_suits = random.sample(suits,2)

first_card = ("your first card is the {} of {}") .format(chosen_cards[0],chosen_suits[0])
second_card = ("your second card is the {} of {}") .format(chosen_cards[1],chosen_suits[1])

print(first_card)
print(second_card)

您可以使用itertools生成所有组合,然后对列表进行洗牌并取两个,我为n_样本设计了函数,您可以选择n个样本:

import random
import itertools

cards = [2,3,4,5,6,7,8,9,10,'King','Queen','Jack']


suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds']

def n_random(list_1,list_2,no_of_samples):
    all_possible=[i for i in itertools.product(list_1,list_2)]
    if no_of_samples>len(all_possible):
        return 'Wrong choice'
    else:
        random.shuffle(all_possible)
        return all_possible[:2]

print(n_random(cards,suits,2))
输出:

[(3, 'Diamonds'), (2, 'Spades')]

您希望输出什么?为什么不做一个大的随机选择,然后将输出分成两个?您希望它们是唯一的吗?使用随机抽样。它们能一样吗?在同一个列表上使用random.choice两次。如果您想选择两个不同的类别(如
卡片
套装
——它们的含义不同),您不能只做
random.choice(卡片+套装)
因为任何项目被选择的概率与任何其他项目的概率相同。这将允许他们选择同一张卡两次。此外,在回答时,只有代码的答案最好有解释@克里斯,同一张牌挑两次有什么不对?问题中没有提到选择必须是唯一的。这将允许每次使用不同的卡!在注释之前尝试测试代码这并不保证每次都有不同的卡。另外,@ForceBru“我想从同一个列表中进行两个独立的随机选择。”@chrisz,是的,这绝对不能保证。同样,没有提到选择的唯一性。它们是独立的意味着它们是独立的。这将不允许选择所有可能的卡片组合。例如,您无法同时选择红桃的
2
和黑桃的
2
+1。另外,
(卡[i//4],适合[i%4])随机输入i。样本(范围(n张卡),n张卡)
避免了内存中的显式乘积。适用于特别大的值52。
[(3, 'Diamonds'), (2, 'Spades')]