пополам и списки пользовательских объектов (python 3) - PullRequest
1 голос
/ 16 ноября 2010

До Python 3 я использовал bisect для вставки пользовательских объектов в список.bisect был счастлив этим, потому что у моего пользовательского объекта был def __cmp__, который определял, как сравнивать объекты.Я прочитал обоснование отказа от поддержки cmp в Python 3, и я в порядке с этим.Я думал, что исправление для моего старого кода будет состоять в том, чтобы «украшать» мой пользовательский объект, превращая его в кортеж

(integer, user-defined object).

Однако, если у меня есть список моих кортежей, и попробуйте ...

i = bisect_left([list_of_tuples], (integer, user-defined object))

тогда я получаю сообщение об ошибке "builtins.TypeError: неупорядоченные типы ..."

Итак, (в python 3), как использовать bisect для списков элементов,t сделан полностью из вещей с естественным порядком сортировки?

1 Ответ

13 голосов
/ 16 ноября 2010

Вам необходимо добавить метод __lt__; теперь это то, что используется для сравнения вместо __cmp__

...