如何实现含数字与扑克牌字符的单字符串自定义升序排序
如何实现含数字与扑克牌字符的单字符串自定义升序排序
没问题,这事儿超简单,咱们就用你偏好的普通函数来实现,完全不用绕脑子的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
相关产品推荐
相关产品推荐

