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

如何实现含数字与扑克牌字符的单字符串自定义升序排序

如何实现含数字与扑克牌字符的单字符串自定义升序排序

没问题,这事儿超简单,咱们就用你偏好的普通函数来实现,完全不用绕脑子的lambda,逻辑清晰得很!

核心思路就是给每个扑克牌字符指定一个自定义的排序优先级,让Python的sorted函数按照我们设定的规则来排就行。

先给你上完整的可运行代码,之后再拆解讲清楚:

def sort_poker_hand(hand):
    # 定义扑克牌的升序优先级:数字2-9在前,接着是T、J、Q、K,A最大
    card_rank = '23456789TJQKA'
    
    # 辅助函数:返回每个字符对应的排序权重值
    def get_priority(card):
        return card_rank.index(card)
    
    # 按自定义权重排序字符,再拼接成字符串
    sorted_chars = sorted(hand, key=get_priority)
    return ''.join(sorted_chars)

# 测试你给的例子
print(sort_poker_hand("Q4JTK"))  # 输出: 4TJQK
print(sort_poker_hand("9T43A"))  # 输出: 349TA
print(sort_poker_hand("T523Q"))  # 输出: 235TQ

咱们一步步拆解逻辑:

  • 首先card_rank这个字符串就是我们的排序规则表:从左到右的顺序就是我们要的升序顺序,比如'2'排在最前面,优先级最低(排序时会放在最左边),'A'在最后,优先级最高(排序时放在最右边)。
  • 辅助函数get_priority的作用很直白:把每个扑克牌字符转换成它在规则表里的索引位置,比如'3'对应索引2,'T'对应索引8,这样sorted函数就能通过这些数字大小来判断字符的排序顺序。
  • 最后用sorted函数传入自定义的key参数(也就是我们的权重函数),对输入字符串的每个字符排序,再拼接成最终的字符串返回。

这种写法的好处就是完全符合你要的“容易理解”的要求,以后要是想调整排序规则(比如把A当成最小的牌),只需要修改card_rank的字符顺序就行,改起来超方便。

备注:内容来源于stack exchange,提问作者Peter4075

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:13:09