2010-11-15 2 views
1

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

(integer, user-defined object). 

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

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

тогда я получаю ошибку «builtins.TypeError: unorderable типов ...»

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

ответ

12

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

+0

doh! Я уже думал об этом ... – Mike

+5

P.S. Я думаю, вы можете отметить это как ответ на вопрос, который дает мне репутацию и, по-видимому, заставляет людей больше отвечать на ваши будущие вопросы. – novalis

Смежные вопросы