You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对扑克牌字符串列表进行自定义排序?

实现方案

完全可以实现,Python的sorted()函数支持通过key参数自定义排序规则,具体操作如下:

步骤1:定义牌面权重映射

先把每个牌面对应的优先级数值存到字典里,数值越大优先级越高:

rank_weight = {
    'A': 14, 'K': 13, 'Q': 12, 'J': 11,
    '10': 10, '9':9, '8':8, '7':7, '6':6,
    '5':5, '4':4, '3':3, '2':2
}

步骤2:编写排序逻辑

每张牌的点数是字符串从第2位开始的部分(card[1:],因为第一位是花色标识H/S/D/C),我们用这个点数去权重字典取对应值作为排序依据,设置reverse=True实现从大到小排序:

# 以bot1为例排序
bot1 = ['H5', 'CJ', 'C4', 'D7', 'H10', 'S4', 'HQ', 'C9', 'DA', 'S8', 'CQ', 'CA', 'CK']
sorted_bot1 = sorted(bot1, key=lambda x: rank_weight[x[1:]], reverse=True)
print(sorted_bot1)

运行后输出结果和你给出的预期完全一致:

['DA', 'CA', 'CK', 'CQ', 'HQ', 'CJ', 'H10', 'C9', 'S8', 'D7', 'H5', 'C4', 'S4']

批量处理所有玩家牌组

如果要一次性给4个玩家的牌都排序,直接复用上述逻辑即可:

bot2 = ['H4', 'S5', 'C6', 'H8', 'S3', 'D5', 'H2', 'S10', 'SJ', 'HA', 'H7', 'SA', 'HK'] 
bot3 = ['D8', 'SQ', 'D4', 'D2', 'DJ', 'DK', 'D9', 'DQ', 'HJ', 'SK', 'S2', 'S7', 'C3']  
player = ['C5', 'H3', 'D10', 'C10', 'S6', 'D3', 'C8', 'H9', 'C7', 'C2', 'S9', 'H6', 'D6']

sorted_bot2 = sorted(bot2, key=lambda x: rank_weight[x[1:]], reverse=True)
sorted_bot3 = sorted(bot3, key=lambda x: rank_weight[x[1:]], reverse=True)
sorted_player = sorted(player, key=lambda x: rank_weight[x[1:]], reverse=True)

如果后续需要增加花色排序规则(比如同点数下黑桃>红桃>方块>梅花),只需要调整key返回元组即可,优先级按元组元素顺序依次判断:

suit_weight = {'S':4, 'H':3, 'D':2, 'C':1}
# 优先按点数降序,点数相同按花色降序
sorted_cards = sorted(bot1, key=lambda x: (rank_weight[x[1:]], suit_weight[x[0]]), reverse=True)

内容的提问来源于stack exchange,提问作者san

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:30:03