Конвертировать сортировку из Python2 в Python3 - PullRequest
0 голосов
/ 18 сентября 2018

Я написал сортировку на Python2, я пытаюсь преобразовать ее в Python3, который запрашивает ключ и говорит, что больше нет функции cmp:

test.sort(lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9]))

Любые советы?

С уважением,

1 Ответ

0 голосов
/ 18 сентября 2018

Официальная документация Python 3 объясняет в этом разделе правильный способ преобразования этого из Python 2 в 3.

Оригинальная cmp функция просто делает что-то вроде

def cmp(x, y):
   if x == y:
       return 0
   elif x > y:
       return 1
   else:
       return -1

То есть он эквивалентен sign(x-y), но также поддерживает строки и другие типы данных.

Однако ваша проблема в том, что текущая функция sort работает не с функцией сравнения с двумя аргументами, а с единственной key функцией с одним аргументом. Python предоставляет functools.cmp_to_key, чтобы помочь вам преобразовать его, поэтому сделайте что-то вроде

test.sort(key = functools.cmp_to_key(
    lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9])
)) 
...