如何使用三层嵌套列表创建可扩展的扑克牌卡组?
解决方案
步骤1:绑定卡牌数值与名称
先把给定的values和names按索引一一绑定,因为两者是严格对应的(比如values[0]=11对应names[0]="A"):
values = [11, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2] names = ["A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2"] suits = ['Spade', 'Heart', 'Diamond', 'Club'] # 将数值和名称配对成元组列表 card_ranks = list(zip(values, names))
步骤2:生成单副扑克牌组
用嵌套列表推导式或itertools.product,把每个数值-名称对和所有花色组合,生成包含三个元素的子列表:
方法1:纯列表推导式(无需额外导入)
single_deck = [[val, name, suit] for val, name in card_ranks for suit in suits]
方法2:使用itertools.product(逻辑更直观)
from itertools import product single_deck = [[val, name, suit] for (val, name), suit in product(card_ranks, suits)]
步骤3:扩展为多副牌
通过num_deck变量控制牌组数量,直接将单副牌列表重复对应次数即可:
num_deck = 2 # 示例:生成2副牌 full_deck = single_deck * num_deck
原方法失效的原因
你之前用itertools.product(range(1,14), suits)存在两个核心问题:
range(1,14)生成的数值和你给定的values不匹配(比如A的数值是11而非1);- 没有将数值与对应的
names绑定,自然无法生成包含三个元素的卡牌条目。
按上述方法生成的牌组,每个子列表都会包含[数值, 名称, 花色],完全符合预期格式。
内容的提问来源于stack exchange,提问作者CapWater
相关产品推荐
相关产品推荐

