Проблемы со сравнением кортежей при использовании определенного класса, который обходит сравнение.Python

Программы на Python
Ответить
Anonymous
 Проблемы со сравнением кортежей при использовании определенного класса, который обходит сравнение.

Сообщение Anonymous »

Во время моего текущего школьного проекта я придумал особый алгоритм сортировки, который назвал «параллельная_сортировка». Предоставляя ему список целых чисел и список словарей, он сортирует словари в соответствии с целыми числами. Например:

Код: Выделить всё

parallel_sort([1,0,2],[{1:1},{0:0},{2:2}]) #[{0:0},{1:1},{2:2}]
Это прекрасно работает, и я подумал, можно ли упростить задачу, используя метод сортировки. Сначала я подумал об использовании списка (целочисленных, словарных) кортежей, но в некоторых случаях целые числа были одинаковыми, поэтому я не смог. Итак, у меня возникла идея: если бы у меня был класс, который нельзя было бы ни с чем сравнить, и я поместил бы его в середину этих кортежей, он мог бы остановить сравнение кортежей и рассмотреть словари. Новый параллельный_сорт будет работать следующим образом:

Код: Выделить всё

def parallel_sort(int_lst,dict_lst):
tuple_lst=[]
for i in range(len(int_lst)):
tuple_lst.append((int_lst[i],incomparable_class,dict_lst[i]))
tuple_lst.sort()
res=[]
for tupl in tuple_lst:
res.append(tupl[2])
return res
Более того, я понял, что, пока класс incomparable останавливает сравнение кортежей, я могу даже использовать смешанные типы, то есть делать такие вещи:

Код: Выделить всё

parallel_sort([1,0,2],[0,'0',[]]) #['0',0,[]]
Итак, я попытался создать указанный класс:

Код: Выделить всё

class Incomparable:
def __init__(self): #The incomparable class itself doesn't do anything
pass
def __eq__(self,obj): #Never equal to anything
return False
def __ne__(self,obj):
return True
def __gt__(self,obj): #Never greater than anything
return False
def __ge__(self,obj):
return False
def __lt__(self,obj): #Never lesser than anything
return False
def __le__(self,obj):
return False
Очевидно, я провел некоторое тестирование, а затем столкнулся с проблемой:

Код: Выделить всё

incmp=Incomparable()

0incmp
#False

0==incmp
#False

incmp==incmp
#False

incmp!=incmp
#True

(0,incmp,0)(0,0,'0')
#True

#Up to here, it works as intended

(0,incmp,0)

Подробнее здесь: [url]https://stackoverflow.com/questions/79831990/issues-with-tuple-comparison-while-using-a-specific-class-that-bypasses-comparis[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»