✅ Решения

⚡ Кратко

Сначала сравните своё решение с идеей, а не с каждой строкой.

Если код отличается, проверьте поведение на тех же входных данных.

Решение считается хорошим, если оно понятно, проходит пример и не зависит от случайного порядка вывода.

Топ-3 ошибки: путать ссылку и копию; ожидать порядок там, где его нет; усложнять выражение, когда обычный цикл читается лучше.

Решение 1. Взрослые

ages = [12, 17, 24, 18, 30]
adults = [age for age in ages if age >= 18]
print(adults)

Фильтр находится после for и пропускает только age >= 18.

Решение 2. Форматирование имён

names = ["John", "Anna", "Zoe", "Mark"]
formatted_names = [name.lower() if len(name) > 3 else name.upper() for name in names]
print(formatted_names)

if-else выбирает значение для каждого имени.

Решение 3. Разворот матрицы

matrix = [[7, 8], [9, 10], [11, 12]]
flattened = [value * 2 for row in matrix for value in row]
print(flattened)

Порядок for такой же, как во вложенном цикле.

Решение 4. Очередь deque

from collections import deque

queue = deque()
queue.append(1)
queue.append(2)
queue.popleft()
queue.append(3)
print(queue)

popleft() удаляет первый элемент, поэтому остаются 2 и 3.

Решение 5. Правильные скобки

from collections import deque

brackets = "({[}])"
pairs = {")": "(", "]": "[", "}": "{"}
stack = deque()
is_valid = True

for char in brackets:
    if char in pairs.values():
        stack.append(char)
    elif char in pairs:
        if not stack or stack.pop() != pairs[char]:
            is_valid = False
            break

if stack:
    is_valid = False

print("Скобки:", brackets)
print("Валидны:", is_valid)

Стек хранит открывающие скобки; закрывающая должна соответствовать последней открытой.