[英]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.