2016-05-24 42 views
3

我的卡的列表:获得最高值卡列表

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

该字典将是性能方面的最佳选择。 – RafaelC

+0

这是一个学校作业吗?为什么不尝试自己做自己的作业,然后问问Stackoverflow如果遇到任何特定的问题。 – MGOwen

+0

@MGOwen看起来像一个非常具体的问题/问题。显示当前的尝试。要求优化。对我来说,这似乎是一个模型问题。 –

回答

2

你可以使用max内置的功能和使用自定义功能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]]) 
+0

这将是一个单线,但表现为O(K * n)为K,你手中的牌数量为n,len(rank_cards)为n。构建字典会有更好的性能,因为成本将仅为max(O(n),O(K))(考虑在HashMap中访问是O(1)) – RafaelC

+0

谢谢你的回答:) – RoadRunner