2016-05-24 44 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