/
ssstrekoza
/
Iterators_Generators_Yield
Обзор
Документация
Войти
/
ssstrekoza
/
Iterators_Generators_Yield
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
3.py
42 строки
1 KB
Elena Dekho
Initial commit
14 ноя 2025, 06:50
14 ноя 2025, 06:50
e0ae736
Код
Авторство
О чём код?
class FlatIterator: def __init__(self, list_of_list): # Создаём стек и кладём туда исходный список в обратном порядке self.stack = list(reversed(list_of_list)) def __iter__(self): return self def __next__(self): # Пока стек не пуст while self.stack: # Достаём верхний элемент item = self.stack.pop() if isinstance(item, list): # Если это список — распаковываем его в стек (в обратном порядке) self.stack.extend(reversed(item)) else: # Если не список — возвращаем return item # Если дошли сюда — всё кончилось raise StopIteration def test_3(): list_of_lists_2 = [ [['a'], ['b', 'c']], ['d', 'e', [['f'], 'h'], False], [1, 2, None, [[[[['!']]]]], []] ] for flat_iterator_item, check_item in zip( FlatIterator(list_of_lists_2), ['a', 'b', 'c', 'd', 'e', 'f', 'h', False, 1, 2, None, '!'] ): assert flat_iterator_item == check_item assert list(FlatIterator(list_of_lists_2)) == ['a', 'b', 'c', 'd', 'e', 'f', 'h', False, 1, 2, None, '!'] if __name__ == '__main__': test_3()