我有一张名单:
hand = ["KC", "QC", "4C", "0S"]
我总是希望在排名方面获得最高的牌,就像在此列表中一样
rank_cards = ["2", "3", "4", "5", "6", "7", "8", "9", "0", "J", "Q", "K", "A"]
这种情况下最高的牌是:
"KC"
我怎么能为我得到的任何一只手做到这一点?
我正在考虑使用字典按照索引对卡进行排名,如下所示:
d = {}
for i, c in enumerate(rank_cards):
d[c] = i
有更好的方法吗?
由于
答案 0 :(得分:2)
您可以使用key
内置函数并使用自定义>>> max(hand, key=lambda c: rank_cards.index(c[0]))
'KC'
函数。
>>> hand.sort(key=lambda c: rank_cards.index(c[0]), reverse=True)
如果您想根据等级
按降序对整个手进行排序>>> rank_cards_map = {c: i for i, c in enumerate(rank_cards)}
>>> max(hand, key=lambda c: rank_cards_map[c[0]])
如果您希望通过预先计算索引(基本上是您的解决方案,但在字典理解中排成一行)稍微提高性能。
{{1}}