""" Урок 33. Практикум 8 — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/33-practice-8/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-33.py """ # ==================================================================== # Пример 1. List comprehension с фильтром — короткая замена циклу с if # ==================================================================== end = 20 squares = [number ** 2 for number in range(1, end + 1) if number % 2 == 0] print(squares) # [4, 16, 36, 64, 100, 144, 196, 256, 324, 400] words = ["apple", "cherry", "kiwi", "banana", "orange"] excluded_char = "r" filtered_words = [word for word in words if excluded_char not in word] print(filtered_words) # ['apple', 'kiwi', 'banana'] # ==================================================================== # Пример 2. zip(): обработка двух параллельных списков одновременно # ==================================================================== animals = ["тигр", "слон", "обезьяна", "змея"] weights = [250, 4000, 15, 5] descriptions = [f"{animal.capitalize()} весит {weight} кг" for animal, weight in zip(animals, weights)] lightest_animal = animals[weights.index(min(weights))] print(descriptions) # ['Тигр весит 250 кг', 'Слон весит 4000 кг', 'Обезьяна весит 15 кг', 'Змея весит 5 кг'] print("Самое лёгкое животное:", lightest_animal) # змея # ==================================================================== # Пример 3. Группировка через set длин и sorted() # ==================================================================== words = ["apple", "banana", "kiwi", "cherry", "pear", "grape", "melon"] groups = [] for length in sorted({len(word) for word in words}, reverse=True): group = sorted([word for word in words if len(word) == length]) groups.append(group) print("Группы слов:", groups) # [['banana', 'cherry'], ['apple', 'grape', 'melon'], ['kiwi', 'pear']] # ==================================================================== # Пример 4. Вложенный comprehension: развернуть матрицу в плоский список # ==================================================================== matrix = [[1, 2], [3, 4], [5, 6]] flat = [value for row in matrix for value in row] print(flat) # [1, 2, 3, 4, 5, 6] # ==================================================================== # Пример 5. Координатная сетка: comprehension с двумя независимыми for # ==================================================================== n = 3 grid = [(row, col) for row in range(n) for col in range(n)] print(grid) # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] print(len(grid)) # 9 — n * n координат # ==================================================================== # Пример 6. all() + range(n): проверить условие сразу для всех индексов # ==================================================================== matrix1 = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ] matrix2 = [ [1, 0, 3], [0, 5, 0], [7, 0, 9], ] n = len(matrix1) main_equal = all(matrix1[i][i] == matrix2[i][i] for i in range(n)) secondary_equal = all(matrix1[i][n - 1 - i] == matrix2[i][n - 1 - i] for i in range(n)) print("Совпадают ли главные диагонали:", main_equal) # True print("Совпадают ли побочные диагонали:", secondary_equal) # True # ==================================================================== # Пример 7. Set comprehension: подсчёт уникальных слов без учёта регистра # ==================================================================== text = "Apple orange apple banana Orange" unique_words = {word.lower() for word in text.split()} print("Количество уникальных:", len(unique_words)) # 3 print(sorted(unique_words)) # ['apple', 'banana', 'orange'] # ==================================================================== # Пример 8. Сравнение через set теряет количество повторов # ==================================================================== list1 = [1, 2, 3, 4, 4] list2 = [4, 3, 2, 1, 1] print(set(list1) == set(list2)) # True — одинаковый набор чисел print(sorted(list1) == sorted(list2)) # False — но количество повторов разное # ==================================================================== # Пример 9. Операторы множеств вместо ручных циклов: - & | ^ # ==================================================================== chest1 = {"золото", "серебро", "рубины", "алмазы"} chest2 = {"серебро", "рубины", "изумруды", "сапфиры"} print("Только в первом сундуке:", sorted(chest1 - chest2)) # разность print("Общее в обоих сундуках:", sorted(chest1 & chest2)) # пересечение print("Все уникальные драгоценности:", sorted(chest1 | chest2)) # объединение set1 = {1, 2, 3} set2 = {3, 4, 5} print("Только в одном из множеств:", sorted(set1 ^ set2)) # симметрическая разность # [1, 2, 4, 5] — то, что есть ровно в одном из двух множеств # ==================================================================== # Пример 10. Уникальные значения с сохранением порядка появления # ==================================================================== numbers = [4, 1, 7, 6, 2, 6, 8, 1, 5, 4] seen = set() unique_numbers = [] for number in numbers: if number not in seen: seen.add(number) unique_numbers.append(number) print("Уникальные по порядку:", unique_numbers) # [4, 1, 7, 6, 2, 8, 5] print("Через set() теряется порядок:", set(numbers)) # {1, 2, 4, 5, 6, 7, 8} — у вас может быть другой порядок печати # ==================================================================== # Пример 11. Очередь заказов: deque вместо списка # ==================================================================== from collections import deque orders = deque(["Pizza", "Burger", "Pasta"]) first_order = orders.popleft() print("Первый заказ:", first_order) # Pizza print(f"Осталось {len(orders)} заказов:") # Осталось 2 заказов: for order in orders: print("-", order) # - Burger # - Pasta orders.append("Sushi") # новый заказ встаёт в конец очереди print("После нового заказа:", list(orders)) # ['Burger', 'Pasta', 'Sushi'] # то же самое обычным списком — работает, но менее выразительно для очереди orders_list = ["Pizza", "Burger", "Pasta"] first_via_list = orders_list.pop(0) print("То же самое списком:", first_via_list, orders_list) # Pizza ['Burger', 'Pasta']