改变Python中排序的工作方式(不同于字母数字)

时间:2014-05-29 18:18:56

标签: python sorting

我将扑克中的牌表示为字母(大写和小写),以便有效地存储它们。我现在基本上需要一个自定义排序功能来允许它们进行计算。

使用

在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

2 个答案:

答案 0 :(得分:4)

你可以提供key functionsorted,将为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范围内的卡片作为字符,然后再次在显示和存储时转换为正确的字母。