Python
Практические задачи на списки Python: фильтрация, поиск и сортировка
Фильтрация, поиск и сортировка — три действия, которые постоянно встречаются при работе со списками
В этой подборке задачи построены вокруг реальных движений с данными: оставить нужное, найти первое подходящее, отсортировать, собрать новый список
Как работать с подборкой
Материал помогает отработать списки глубже, чем простое добавление элементов через append
Перед просмотром решения попробуйте написать хотя бы черновик. Если задача не идет, выпишите входные данные, ожидаемый результат и одно действие, которое нужно сделать первым
После решения измените данные и запустите код снова. Так вы быстрее увидите, где программа привязана только к одному примеру
Задачи с решениями
Задача 1. Только положительные числа
Условие: Из списка чисел соберите новый список только с положительными значениями
Подсказка: Не удаляйте элементы из исходного списка во время обхода
Решение:
numbers = [-3, 0, 5, 8, -1]
positive = []
for number in numbers:
if number > 0:
positive.append(number)
print(positive)
Проверка: Результат должен быть [5, 8]
Задача 2. Максимум без max
Условие: Найдите максимальное число в непустом списке без функции max
Подсказка: Начните с первого элемента, затем сравнивайте остальные
Решение:
numbers = [4, 9, 1, 12, 7]
largest = numbers[0]
for number in numbers:
if number > largest:
largest = number
print(largest)
Проверка: Проверьте список из одного элемента
Задача 3. Слова длиннее трех букв
Условие: Оставьте в новом списке только слова длиннее трех символов
Подсказка: len работает и со строками, и со списками
Решение:
words = ["кот", "python", "дом", "список"]
long_words = []
for word in words:
if len(word) > 3:
long_words.append(word)
print(long_words)
Проверка: Результат должен содержать python и список
Задача 4. Индексы отрицательных чисел
Условие: Найдите индексы всех отрицательных чисел
Подсказка: enumerate дает и индекс, и значение
Решение:
numbers = [4, -2, 0, -7, 9]
indexes = []
for index, number in enumerate(numbers):
if number < 0:
indexes.append(index)
print(indexes)
Проверка: Результат должен быть [1, 3]
Задача 5. Удалить дубликаты с сохранением порядка
Условие: Соберите список уникальных значений в исходном порядке
Подсказка: Для маленькой задачи можно проверять через in
Решение:
numbers = [1, 2, 1, 3, 2, 4]
unique = []
for number in numbers:
if number not in unique:
unique.append(number)
print(unique)
Проверка: Результат должен быть [1, 2, 3, 4]
Задача 6. Объединить два списка попарно
Условие: Даны имена и баллы, соберите список строк имя: балл
Подсказка: zip идет по двум спискам одновременно
Решение:
names = ["Анна", "Иван", "Оля"]
scores = [90, 75, 88]
result = []
for name, score in zip(names, scores):
result.append(f"{name}: {score}")
print(result)
Проверка: Проверьте списки разной длины и посмотрите поведение zip
Задача 7. Сортировка по длине слова
Условие: Отсортируйте список слов по длине
Подсказка: key=len передает сортировке правило сравнения
Решение:
words = ["python", "go", "javascript", "sql"]
words.sort(key=len)
print(words)
Проверка: Самое короткое слово должно оказаться первым
Задача 8. Найти первое подходящее число
Условие: Найдите первое число больше 10 и остановите цикл
Подсказка: break завершает цикл сразу после найденного значения
Решение:
numbers = [3, 8, 12, 5, 20]
for number in numbers:
if number > 10:
print(number)
break
Проверка: Результат должен быть 12, а не 20
Задача 9. Разделить числа на две группы
Условие: Разложите числа на четные и нечетные списки
Подсказка: Создайте два списка и добавляйте число в нужный
Решение:
numbers = [1, 2, 3, 4, 5, 6]
even = []
odd = []
for number in numbers:
if number % 2 == 0:
even.append(number)
else:
odd.append(number)
print(even)
print(odd)
Проверка: Проверьте, что каждое число попало ровно в один список
Задача 10. Список квадратов
Условие: Создайте список квадратов чисел от 1 до 10
Подсказка: Сначала решите через обычный цикл, потом можно через list comprehension
Решение:
squares = []
for number in range(1, 11):
squares.append(number ** 2)
print(squares)
Проверка: Последний элемент должен быть 100
Задача 11. Топ-3 числа
Условие: Отсортируйте числа по убыванию и возьмите первые три
Подсказка: sorted возвращает новый список, а reverse=True меняет порядок
Решение:
numbers = [8, 1, 10, 3, 7, 12]
top = sorted(numbers, reverse=True)[:3]
print(top)
Проверка: Результат должен быть [12, 10, 8]
Задача 12. Поиск товара по названию
Условие: Найдите товар в списке словарей по названию
Подсказка: Если нашли товар, можно выйти из цикла через break
Решение:
products = [
{"title": "Книга", "price": 700},
{"title": "Курс", "price": 3000},
]
target = "Курс"
found = None
for product in products:
if product["title"] == target:
found = product
break
print(found)
Проверка: Проверьте название, которого нет в списке
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Как проверять свои решения
Для каждой задачи сделайте минимум три запуска: обычный пример, крайний пример и пример с неожиданными данными. Для чисел это может быть ноль или отрицательное значение, для строк — пустая строка, для списков — пустой список или повторяющиеся элементы
Если код работает, объясните его словами. Скажите, какие данные приходят на вход, что хранится в переменных, где меняется результат и почему программа останавливается
Частые ошибки новичков
- читать решение, но не запускать его руками
- менять сразу несколько строк и не понимать, какая из них сломала код
- называть переменные одной буквой там, где можно написать понятное имя
- забывать проверять пустые строки, пустые списки и ноль
- путать вывод через print и возврат результата через return
- оставлять код рабочим только для одного заранее выбранного примера
Дополнительные задачи
Задача 13. Сортировка товаров по цене
Условие: Отсортируйте список товаров от дешевых к дорогим
products = [
{"title": "Клавиатура", "price": 2500},
{"title": "Мышь", "price": 900},
{"title": "Монитор", "price": 12000},
]
products_sorted = sorted(products, key=lambda product: product["price"])
print(products_sorted)
Проверка: Добавьте два товара с одинаковой ценой
Задача 14. Поиск по части строки
Условие: Найдите все товары, где в названии есть введенный текст
query = "мо".lower()
titles = ["Монитор", "Мышь", "Коврик", "Модем"]
found = []
for title in titles:
if query in title.lower():
found.append(title)
print(found)
Проверка: Проверьте пустой запрос и запрос без совпадений