Python3.5排序自定义比较无法按预期工作

时间:2018-04-30 09:02:11

标签: python python-3.x list sorting

我正在尝试为要订购的字符串列表开发一个简单的自定义比较。 该列表代表一系列卡片,它的编写方式如下:

['d10', 's2', 'c3', 'b5', 'c7', 'b2', 'b10', 'b7', 'c6', 's6']

每个字符串都用char ('b','c','d','s')表示,数值从1到10(FE要求我这个,对我而言,如果值从0到9,它将是完美的)。

问题:如果我在列表上调用sort()函数,它的工作正常,除了值为10的值。我认为它将10视为一个字符串并比较第一个char为1并与其他char进行比较。

因此,我希望使用sorted库中的cmp_to_keyfunctools进行自定义排序。

这是我写的:

def distribute_hands(self):
    self.shuffle()
    hands = list(self.cards[p:p+SUIT_CARDS] for p in range(0, NUM_CARDS, SUIT_CARDS))
    for hand in hands: 
        hand = sorted(hand, key=cmp_to_key(self.custom_cmp))
    return hands

def custom_cmp(self, a, b):
    try:
        if (a[0] < b[0] or int(a[1]) < int(b[1]+b[2]) ):
            return 1 
        return 0
    except IndexError:
        if (a[0] < b[0] or int(a[1]) < int(b[1]) ):
            return 1 
        return 0

写得不好'因为我正在努力寻找最佳解决方案。 排序根本不起作用,我无法理解为什么。

Python vers:3.5.2

2 个答案:

答案 0 :(得分:1)

这是一个更简单的解决方案:

currency_name

它通过对卡的元组形式进行排序来工作,其中元组的第一个元素是字符串的第一个字符,而元组的第二个元素是第二个元素的整数形式(可能是第三个元素)字符串'10'的字符串。

答案 1 :(得分:1)

如果数字不是10,你可以为数字添加0,然后直接按键进行比较:

hand = sorted(hand, key=lambda x: x if len(x) == 3 else x[0] + '0' + x[1])