python - 更改 Python 中的排序方式(与字母数字不同)

标签 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

最佳答案

您可以提供 key functionsorted 时,将为迭代中的每个元素调用此函数,并且返回值将代替元素值用于排序。

在这种情况下,它可能类似于以下内容:

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)

关于python - 更改 Python 中的排序方式(与字母数字不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940218/

相关文章:

C++ - 更改自定义 QSortFilterProxyModel 的排序

python - 如何在多层 python 字典中找到最小值,以及它的 "path"(即叶值的键列表)

python - 有没有办法获取将文件下载到 Python 的原始链接?

python - 如何理解 Python 循环的 `else` 子句?

python - 在 Python 中计算图像数据集 channel 明智均值和标准差的最快方法

javascript - 在多维数组中搜索字符串重复项

sorting - 在 lua 中实现表以访问特定部分供以后使用

python - 使用 Python 的 matplotlib/basemap 的颜色状态

python - 如何将 2 个输出一个作为键,另一个作为值存储在字典中

sorting - 按词条频率计数对结果进行排序