|
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 2
|
|
С занесением во множества и словари08.01.2020, 21:10. Показов 16173. Ответов 1
Метки нет (Все метки)
озьмём класс Point из задачи «Равенство и порядок» (в классе должна быть определена проверка на равенство) и попробуем положить несколько точек этого класса во множество или сделать их ключами словаря. Получим ошибку:
>>> points_set = {Point(’A’, 0, 3), Point(’A’, 0, 3)} Traceback (most recent call last): Python Shell, prompt 2, line 1 builtins.TypeError: unhashable type: ’Point’ Кстати, если закомментировать метод __eq__, ошибка исчезнет, но во множество добавятся одинаковые на наш взгляд точки. Дело в том, что проверка на равенство может быть достаточно затратной операцией и, чтобы минимизировать количество сравнений, используется технология хеширования. Наличие свойства hashable у объекта означает, что для него определено специальное неизменное значение (в случае множеств и словарей это целое число), с помощью которого он предварительно быстро сравнивается с другими объектами. Если хеши двух объектов равны, объекты могут быть равны в смысле __eq__ (а могут и не быть), но если хеши различаются, объекты точно различны. По умолчанию у пользовательских объектов есть хеши, которые строятся на основе их id() и, соответственно, различны для всех объектов. Когда же мы создаём свою реализацию __eq__, такой хеш перестаёт быть актуальным, потому что допускает существование равных (с нашей точки зрения) объектов с различными хешами, что противоречит самой идее хеширования. Таким образом, чтобы восстановить хеширование, нам надо самим определить метод __hash__. Это несложно сделать, если, следуя рекомендациям из документации, вычислять хеши с помощью функции hash() на основе тех же полей объекта, которые участвуют в сравнении __eq__. Соответственно, ваша задача — определить метод __hash__ для класса Point. Формат ввода Каждый тест представляет собой код, в котором будет использоваться ваш класс. Пример 1 Ввод Вывод from solution import Point points_set = {Point("A", 0, 3), Point("A", 0, 3), Point("A", 3, 0), Point("B", 0, 3)} print(sorted(points_set)) [Point('A', 0, 3), Point('A', 3, 0), Point('B', 0, 3)] Пример 2 Ввод Вывод from solution import Point points = [Point("A", 0, 3), Point("A", 0, 3), Point("A", 3, 0), Point("A", 3, 0), Point("B", 0, 3), Point("A", 0, 3)] points_dir = {} for i, point in enumerate(points): points_dir[point] = i print(["{}: {}".format(k, v) for k, v in sorted(points_dir.items())]) ['A(0, 3): 5', 'A(3, 0): 3', 'B(0, 3): 4']
0
|
|
| 08.01.2020, 21:10 | |
|
Ответы с готовыми решениями:
1
Множества, словари Множества, словари
|
|
11 / 11 / 1
Регистрация: 16.01.2020
Сообщений: 19
|
||||||
| 22.12.2020, 11:07 | ||||||
3
|
||||||
| 22.12.2020, 11:07 | |
|
Помогаю со студенческими работами здесь
2
Множества, Кортежи, Словари Словари и множества. SET MAP Списки,Котежи,Словари, Множества! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|