如何在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
相关产品推荐
相关产品推荐

