= [1, 2, 3].__iter__(). Как например у списка реализован метод iter внутри? Каким образом он из списка формирует объект итератор с методом next()?
а как бы ты реализовал итератор для списка?
Я бы в объекте итератор хранил ссылку на исходный список и методом next перемещался по его элементам. Но это же бессмысленно
почему бессмысленно?
как перемещался бы?
к слову вызывать метод __iter__() напрямую не принято. в питоне есть встроенная функция iter() которая возвращает итератор для переданного объекта.
Получается в python пока у последовательности не вызван метод iter ее нельзя перебирать?
смотря что ты подразумеваешь под "перебирать".
Проходиться по элементам
Получается если я захочу реализовать итератор для множества, то мне его нужно преобразовать в список? Или как будет правильней?
Ведь множество нельзя перебирать через индекс
у множества есть своя реализация итератора для множества
для того, чтобы пройти по множеству уже есть итератор
Вот как он устроен мне и интересно
перебирает внутреннюю хеш-таблицу, в общем-то тоже по индексам.
он скорее всего реализован на сишной стороне и обходит хеш-таблицу на которой построен сет
а как мне реализовать свой итератор для множества? Допустим я хочу, чтобы он перебирал его в обратную сторону
никак. у тебя нет доступа к внутренней реализации множеств.
в множестве не нужно знать порядок элементов, он грубо говоря рандомен
он неопределен, но неслучаен.
обратный итератор для множества не имеет никакого смысла
проще сказать "грубо говоря рандомен"
не одному же тебе цепляться к словам.
Это не огрубление, это неправда. Если бы он был рандомен, то каждая итерация одного и того же множества производила бы новый результат.
Правильно ли я предполагаю, что каждый элемент множества хранит ссылку на следующий элемент, а ссылку на предыдущий не имеет?
Не знаком с теорией и реализацией этого типа данных
нет, это не java списки)
казалось бы при чем тут Java
он вообще не имеет не каких ссылок, множество это неупорядочнаая колекция уникальных элементов)
списки в java. Каждый элемент имеет ссылку на следующий)
как тогда итератор может перебирать элементы множества по порядку?
там хэш таблица внутри...поэтому и о(1)
С реализацией хештаблиц я тоже знаком плохо. Знаю что существует множество способов реализации этого типа данных.
У множества есть какой-то порядок по которому отработает iter() потому что внутрях у неё хеш-таблица, а хеш-таблица это в принципе массив по которому можно от начала до конца пройтись. Но этот порядок зависит от того что до этого делали с множеством и в общем случае он заранее не известен
зачем тебе ссылки, когда следущий всегда index + 1? + прочитай про iter, next и тп
Только LinkedList. Чаще всё же ArrayList используют
Обсуждают сегодня