Я пытаюсь разработать простое пользовательское сравнение для списка строк на заказ.
Список представляет собой массив карточек, и он написан так:
['d10', 's2', 'c3', 'b5', 'c7', 'b2', 'b10', 'b7', 'c6', 's6']
Каждая строка представлена символом ('b','c','d','s')
, числовые значения варьируются от 1 до 10 (FE попросил меня об этом, для меня было бы идеально, если бы значения были от 0 до 9).
Проблема: если я вызываю функцию sort()
в списке, она работает нормально, за исключением значений со значением 10. Я думаю, что он рассматривает 10 как строку и сравнивает первый символ, который равен 1, и сравнивает с другими.
Итак, я посмотрел на пользовательскую сортировку с sorted
и cmp_to_key
из библиотеки functools
.
Вот что я написал:
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: 3.5.2