|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
Как определить структуру данных со своим in?03.08.2013, 18:28. Показов 1798. Ответов 19
Метки нет (Все метки)
еще проконсультируйте мну,
есть ли более менее стандартная реализация для такой структуры: допустим объявляю класс, описываю его __eq__(self,y) и надо мне такую структуру к-я бы для экземпляров моего класса: 1. предст. собой коллекцию - добавить, удалить по индексу, срез, чтение/изменение по индексу 2. имела функцию a in struct (проверка вхождения) к-я возвращала бы индекс(ы), если struct[indexes]==a да, написать не сложно, ч/з map, я спрашиваю про "стандартную"... или все таки наследовать лист и перекрывать in ?
0
|
|
| 03.08.2013, 18:28 | |
|
Ответы с готовыми решениями:
19
Как определить список через алгебраическую структуру данных? Как задать своим типам данных какие-нибудь операции (например сложение)? Определить динамическую структуру данных стек |
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 03.08.2013, 18:44 | ||
|
Ты, как я понял, хочешь что-то типа dict/list, у которых эта операция будет возвращаться все ключи/индексы? Насколько я знаю, такой коллекции нет, так что наследуй UserDict/UserList и переопределяй в нём метод __contains__. Хотя это не очень-то Pythonic-way.
0
|
||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 03.08.2013, 20:51 [ТС] | |
|
В принципе уже написал. Когда руки дойдут хочу в приличный вид привести, а то пока как раз и работает на словаре со значениями экземпляр-класса. Приходится циклить в поисках нужных элементов. А вот был бы in, было бы читабельнее.
Т.е проще говоря хочу такой Set к-ый понимал бы работу с экземплярами класса, т.е. чтобы можно было добавить одно к другому, вычесть, пересечь - ну стандартная логика множеств...с геометрией это было бы полезно - точки, ребра, полигоны...
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
| 03.08.2013, 22:01 | ||||||
|
1
|
||||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
||||||
| 03.08.2013, 22:31 [ТС] | ||||||
|
код? он там. внутры.
да, индексов нет. итератор есть. Работу? операции c множествами. объединение/сложение/пересечение/вычитание. ну и операцию in Только со своим типом. А не с числами, строками или кортежами. В принципе логика операций над множествами со своим типом ничем не будет отличаться от реализованной в стандартной библиотеке. Если определены операторы отношений(больше меньше равно и т.д) для класса, что мешает выполнять например:
Т.е. вопрос именно относительно множеств. А не коллекций. Логика работы(операции) с множествами весьма полезна в случаях когда работаешь со своим типом.
0
|
||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||
| 03.08.2013, 23:00 | |||||||
1
|
|||||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 03.08.2013, 23:21 [ТС] | |
|
а объяснить? что дает __hash__-абельность?
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
| 04.08.2013, 05:29 | ||||||
|
Объекты твоего класса перестали быть хешируемыми потому, что ты определил в нем операцию __eq__ (подробности по ссылке, которую дал accept выше), т.е., если ты определил __eq__, нужно определить и __hash__. Быстрый фикс — определить __hash__ через identity объекта:
Приведи уже код своего класса (и заодно скажи, должны ли быть данные твоего класса изменяемыми?).
1
|
||||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
||||||||
| 04.08.2013, 22:26 [ТС] | ||||||||
|
Добавлено через 3 минуты и Спасибо. Добавлено через 12 часов 54 минуты допустим пишу что то такое:
наличие __hash__ в классе позволяет по полям задействованным в __eq__ идентифицировать значения и соотв. использовать их как допустимый тип для операций с set-ами. Пока правильно или уже нет? Возможно ли путем магических методов сделать такую логику: если __eq__ для пары ребер будет true, то чтобы до рассмотрения следующих пар ребер, c данной парой выполнялась некая работа? В примере - чтобы при рассмотрении а==с в итоговом множестве поле .mf элемента было объединением соотв. полей ребер а и с, т.е. результат был бы: Rib((1,1)-(2,3))-({1, 2, 0})
0
|
||||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||
| 04.08.2013, 23:39 | ||||
|
какого элемента ?
0
|
||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||||
| 05.08.2013, 05:44 | ||||||||||||||||||
|
Вот пример реализации для твоих классов:
0
|
||||||||||||||||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 05.08.2013, 14:13 [ТС] | |
|
"при такой реализации два ребра будут считаться различными" - да это я знаю, я пример натягивал чтобы обрисовать ситуацию. Для примера это не играет.
Именование переменных тоже для примера. mf -master faces - грани к-м принадлежит ребро olf - overlappped faces - грани которые потенциально содержат (по габ тесту) это ребро но это тоже неважно, как разобраться с невидимостью я уже понял(сделал). Щас хочу сделать это по-человечески, избавиться от циклов по возможности, поэтому и разбираюсь с множествами и их модификацией... остальное осмыслю позже , бежать надо... Добавлено через 2 часа 35 минут "Можно, хотя такое поведение может быть неочевидным для пользователя." - как? создавать класс MySet(set)? переопределять операции? "Модифицировать" стандартную реализацию не получится?
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 05.08.2013, 16:07 | ||
|
0
|
||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 05.08.2013, 18:22 [ТС] | |
|
да, есть хэш-значение, зачем еще что-то вызывать,
т.е реализовать такое поведение кроме как перебром по циклу с условием if a in set нельзя? Ну, и всегда есть вариант своего класса с определением требуемой логики...(долгая дорожка...)
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||
| 05.08.2013, 18:33 | ||||||||||
метод сравнения, меняющий объект сравнения, - это костыль, из-за которого потом что-нибудь сломается если такое нужно делать, то это делается отдельным методом нужно задать вопросы: 1) понадобится ли когда-нибудь сравнивать рёбра без слияния граней ? 2) всегда ли надо будет сливать грани рёбер при сравнении рёбер ? да и почему точки на плоскости, а речь про грани идёт ? какой смысл имеет сравнение точек с разных граней ?
0
|
||||||||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 05.08.2013, 18:48 [ТС] | |
|
Но ведь можно наследовать set, и перекрыть код требуемого метода, в данном случае .union? Я прав?
Добавлено через 5 минут Алгоритм динамический. Изначальные ребра предст. собой проекции 3д граней, естественно некотрые грани закрывают друг друга, и соотв. проекции пересекаются, алгоритм из начального набора ребер, динамически образует новый, где каждое ребро уже ни с чем не пересекается, и попутно определяет насколько видимо это ребро(обратный луч и определение Z для данного ребра по каждой из olf)(с этой целью каждое ребро имеет "историю происхождения" т.е. путем перекрытия каких граней должна определяться его глубина видимости(olf), и к какому начальному полигону проекции оно принадлежит("хозяев" м.б. несколько, т.е. ребро одной грани закрывает ребро другой грани)).В начале в olf каждого ребра только номер грани-"первого хозяина", в дальнейшем ребро распадается на участки, и добавляются новые грани к-е закрывают/закрыты данную/данной... пардон,сумбурно. Добавлено через 6 минут т.е. на плоскости и на центральном процессоре(да,да...я знаю кто я). решается задача представления проекции 3д сцены.
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||
| 05.08.2013, 18:57 | |||||
|
0
|
|||||
|
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
|
|
| 05.08.2013, 19:02 [ТС] | |
|
ятд в union производного класса я должен переопределять "свое" поведение? если речь о слиянии множеств, я не прав?
Если как вы сказали ранее - стандартную реализацию set методом магических методов нельзя привести к такому поведению: чтобы сравнение производилось на основании хеша не всех полей моего типа, и в случае если __eq__=true, выполнить свою логику...а не перейти сразу к следующей паре претендентов на слияние...
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||
| 05.08.2013, 19:18 | |||
|
1
|
|||
| 05.08.2013, 19:18 | |
|
Помогаю со студенческими работами здесь
20
Исходя из условия задачи, определить структуру комбинированного типа данных Определить структуру данных, поддерживающую функции добавления, удаления и вывода элементов Описать структуру (запись - record) согласно варианту, определить типы данных полей Определить структуру, описывающую сведения о игрушках, написать и протестировать функции ввода и вывода данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|