📖 Теория

⚡ Кратко

Практикум 8 соединяет list comprehension, zip(), матрицы, множества и очередь.

Квадраты чётных чисел удобно получить comprehension с фильтром.

Для параллельных списков animals и weights используйте zip().

Группировку слов по длине проще делать через словарь, но можно использовать sorted() и set длин.

Матрицу можно развернуть вложенным comprehension.

Для проверки диагоналей сравнивайте элементы [i][i] и [i][n - 1 - i].

set подходит для уникальных слов и операций с сундуками.

Очередь заказов моделируется deque.

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)

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

Стратегии решения

Практикум смешивает несколько тем. Сначала определите основной инструмент: comprehension, zip(), set, индексы матрицы или deque.

Если задача требует уникальности без порядка — используйте set. Если уникальность нужна в порядке появления — храните set для проверки и список для результата.

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)

Матрицы и индексы

Главная диагональ квадратной матрицы — элементы matrix[i][i]. Побочная диагональ — matrix[i][n - 1 - i].

Для сравнения двух диагоналей используйте 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, secondary_equal)

Множества в практических задачах

Множества дают короткое решение для уникальных слов, одинаковых значений и сундуков с драгоценностями.

Для печати учебного результата лучше сортировать множество или явно объяснять, что порядок не гарантируется.

text = "Apple orange apple banana Orange"
unique_words = {word.lower() for word in text.split()}
print("Количество уникальных:", len(unique_words))
Проверить по документации: Современные уточнения в этом разделе сверяйте с актуальной документацией Python 3.x, особенно если используете поведение памяти или производительности как часть архитектурного решения.