[英]Mapping strings to integers in Python
為了構建我的撲克游戲,我將“手”抽象為card
對象列表。
例如, ['AC', '3D', '4S', 'KH', 'TC']
代表hand
對象,並且列表中的每一項都是card
對象。
我想按游戲中的重要性從高到低的順序排列它們。
即'A' > 'K' > ....(so on)... > '2'
我正在尋找將每張卡的等級映射到相應的值。
對於上面的示例,對應關系為[14, 13, 10, 4, 3]
我具有以下功能可為我執行此操作:
def mapper(ranks):
mapping = {
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9,
'T': 10,
'J': 11,
'Q': 12,
'K': 13,
'A': 14
}
new_ranks = [mapping[rank] for rank in ranks]
return new_ranks
def card_ranks(cards):
"Return a list of the ranks, sorted with higher first."
ranks = [r for r,s in cards]
return sorted(mapper(ranks), reverse=True)
這些功能工作正常,但我發現它們不夠Pythonic。
我想知道如何有效地執行此映射(也許使用map
功能)。
這是我發現更具可讀性和Pythonic的方式
def card_ranks(cards):
"Return a list of the ranks, sorted with higher first."
ranks = ['--23456789TJQKA'.index(r) for r,s in cards]
return ranks.sort(reverse=True)
每當我們想要將字符映射到int
,我們都可以使用以下兩種技術之一:
dict
並使用鍵值調用此映射。 index
。 (在這種情況下適用) 此外,如果要在C中將大寫字符映射到其對應的整數值,則可以使用如下代碼:
value_of_ch = 'ABCDEFGHIJKLMNOPQRST'.index(ch + 65)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.