Практикум Python: задачи для самостоятельного изучения
Задача: найти четные числа в списке
Дана последовательность чисел. Требуется извлечь все четные элементы. Рассмотрим различные подходы к решению.
Эффективное решение с list comprehension:
evens = [x for x in nums if x % 2 == 0]алгоритм решения задачи python (алгоритм решения задачи на python)
Однострочная конструкция перебирает элементы nums и включает в новый список только те, у которых остаток от деления на 2 равен нулю. Преимущество: высокая скорость и лаконичность.
Как решить задачу с помощью цикла for и метода append?
evens = []
for x in nums:
if x % 2 == 0:
evens.append(x)базовые задачи python (базовые задачи python)
Этот вариант нагляден для начинающих. Условие проверяется в каждой итерации, элементы добавляются по одному. Цикл явно показывает процесс отбора.
Как использовать функцию filter и лямбда-выражение?
evens = list(filter(lambda x: x % 2 == 0, nums))задачи для обучения python (задачи для обучения python)
Функция filter применяет переданную функцию к каждому элементу и возвращает итератор. Преобразование в список даёт требуемый результат. Подходит для функционального стиля программирования.
Как получить нечетные числа, изменив условие?
odds = [x for x in nums if x % 2 != 0]Использование != вместо == корректно для всех целых чисел, включая отрицательные.
Типичные ошибки: неверное применение оператора % для проверки четности. Для отрицательных чисел -2 % 2 даёт 0, поэтому условие x % 2 == 0 работает верно. Однако при проверке нечетности x % 2 == 1 не захватит -1, так как -1 % 2 в Python равно 1, но это исключение. Безопаснее использовать x % 2 != 0. Ещё одна проблема: попытка модифицировать исходный список во время итерации может привести к непредсказуемому поведению. В приведённых примерах создаётся новый список, что безопасно.
Расширенные примеры обработки списков
Ниже приведены варианты решения смежных задач, демонстрирующие применение изученных конструкций.
Пример 1. Нахождение индексов четных чисел
nums = [10, 21, 32, 43, 54]
indices = [i for i, v in enumerate(nums) if v % 2 == 0]
print(indices)[0, 2, 4]
Функция enumerate возвращает пары (индекс, значение). Условие фильтрует только четные значения, формируя список индексов.
Пример 2. Генерация списка квадратов четных чисел
nums = [1, 2, 3, 4, 5, 6]
squares = [x**2 for x in nums if x % 2 == 0]
print(squares)[4, 16, 36]
List comprehension позволяет совместить фильтрацию и преобразование: для каждого четного числа вычисляется квадрат.
Пример 3. Параллельный перебор двух списков с отбором
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
result = [x + y for x, y in zip(a, b) if x % 2 == 0]
print(result)[8, 12]
zip объединяет элементы двух списков в кортежи. Условие отбирает только те пары, где первый элемент четный, и возвращает сумму.
Пример 4. Обработка строк: извлечение слов определённой длины
text = "Python обучение задача пример"
words = text.split()
long_words = [word for word in words if len(word) > 5]
print(long_words)['обучение', 'задача', 'пример']
Разбиение строки на слова, затем фильтрация по длине. Аналогично можно применять к любым последовательностям.
Пример 5. Использование многомерного списка: фильтрация матрицы по строкам
matrix = [[1, 2], [3, 4], [5, 6]]
rows_with_even = [row for row in matrix if any(x % 2 == 0 for x in row)]
print(rows_with_even)[[1, 2], [3, 4], [5, 6]]
Вложенный list comprehension с функцией any проверяет наличие хотя бы одного четного элемента в строке. Возвращаются все такие строки.