Я определил пользовательский объект с несколькими полями.
Например, скажем, у меня есть объект Student, который состоит из имени, идентификатора и возраста.Чтобы сравнить двух учеников и определить, являются ли они одним учеником или нет, я внедрил метод __ eq__
, который будет возвращать, если совпадают возраст, имя и ID двух учеников.
def __eq__(self, other):
return self.name == other.name and self.ID == other.ID and self.age == other.age
МедведьИмейте в виду, что ученик является лишь примером, поэтому тот факт, что идентификаторы ученика имеют тенденцию быть уникальными, не учитывается.
Предположим, у меня есть следующие списки зачисления с произвольным числом объектов ученика
[S1, S2, S3]
[S2, S3]
[S3, S5, S4]
[S1, S4, S2, S1]
Я хотел бы создать некоторую структуру данных, которая будет содержать следующие элементы
S1, S2, S3, S4, S5
Самый простой способ сделать это - инициализировать некоторую структуру данных, которая может содержать много вещей, захватить элемент,проверьте, существует ли он в структуре, и добавьте его, если его нет.
new_list = some_new_list
for each list of students:
for each student in the list:
check if the student is in new_list
#decide what to do
Если бы я решил реализовать его как простой список, я мог бы потенциально сделать много сравнений, так как мой список продолжаетрасти, особенно если у меня есть смешное количество студентов и списков зачисления.
Какой эффективный способ реализации тего?Как для сравнения двух объектов, так и для последующего использования этого метода сравнения для создания уникального набора объектов.
РЕДАКТИРОВАТЬ: поэтому я попробовал простую реализацию набора.
>>>a = Student("sample", 1234, 18)
>>>b = Student("sample", 1234, 18)
>>>students = set()
>>>students.add(a)
>>>b in students
False
>>>b == a
True
Я что-то не так делаю?