我将扑克中的牌表示为字母(大写和小写),以便有效地存储它们。我现在基本上需要一个自定义排序功能来允许它们进行计算。
使用
在Python中对字母进行排序的最快方法是什么?['a', 'n', 'A', 'N', 'b', 'o', ....., 'Z']
作为排名而不是
['A', 'B', 'C', 'D', 'E', 'F', ....., 'z']
这是默认的吗?
请注意,此排序源自:
import string
c = string.letters[:13]
d = string.letters[13:26]
h = string.letters[26:39]
s = string.letters[39:]
'a' = 2 of clubs
'n' = 2 of diamonds
'A' = 2 of hearts
'N' = 2 of spades
etc
答案 0 :(得分:4)
你可以提供key
function到sorted
,将为iterable中的每个元素调用此函数,返回值将用于排序而不是元素值。
在这种情况下,它可能如下所示:
order = ['a', 'n', 'A', 'N', 'b', 'o', ....., 'Z']
sorted_list = sorted(some_list, key=order.index)
这是一个简短的例子来说明这一点:
>>> order = ['a', 'n', 'A', 'N']
>>> sorted(['A', 'n', 'N', 'a'], key=order.index)
['a', 'n', 'A', 'N']
请注意,为了提高效率,您可能希望使用key
函数的字典查找,而不是order.index
,例如:
order = ['a', 'n', 'A', 'N', 'b', 'o', ....., 'Z']
order_dict = {x: i for i, x in enumerate(order)}
sorted_list = sorted(some_list, key=order_dict.get)
答案 1 :(得分:0)
将[编辑:不存储,内部使用]存储为按值排序的数字,仅在显示时转换为字母。
编辑:如果需要1个字节值,那么您可以将1:52范围内的卡片作为字符,然后再次在显示和存储时转换为正确的字母。