Комбинирование цикла for и условия if в Python: примеры
Быстрый ответ
Для элегантной и функциональной комбинации циклов for и условий if используйте списковые включения. С помощью них можно решать подобные задачи одной строкой кода:
results = [x ** 2 for x in range(10) if x % 2 == 0]
В данном примере возводятся в квадрат все чётные числа. Если вам предстоит обработка больших массивов данных, полезными окажутся генераторные выражения, которые создают элементы по мере получения запросов, сэкономив память:
results_gen = (x ** 2 for x in range(10) if x % 2 == 0)
Выбор способа реализации зависит от конкретной ситуации. Однако в большинстве случаев списковые включения и генераторные выражения помогут написать чистый и лаконичный код.
Эффективное использование и другие случаи применения
Пройдите дальше основных приемов и изучите методы более высшего уровня:
- Используйте операции над множествами, вроде
set.intersection()
для выделения общих элементов иset.difference()
для отслеживания уникальных. - Применяйте функцию
sorted()
для упорядочивания элементов после проведения операций над множествами. - Убедитесь в том, что ваш код совместим с разными версиями Python.
Встроенная генерация кода улучшает его читаемость, облегчая восприятие:
def get_even_squares(numbers):
return (x ** 2 for x in numbers if x % 2 == 0)
squares = get_even_squares(range(10))
Рассмотрите использование функций из модуля operator
и частичного применения функций для создания чёткого интерфейса:
from functools import partial
from operator import mul
twice = partial(mul, 2)
results = [twice(x) for x in range(10) if x > 5]
Визуализация
Сочетание цикла for и условия if можно представить на примере поиска золотых камней в речном русле:
for stone in riverbed:
if is_gold(stone):
collect(stone)
Пример процедуры, напоминающей поиск сокровищ:
Начало: [🪨,🪨,🪨,🪨,✨,🪨,✨]
Конец: [ ✨, ✨]
Мы отфильтровываем речной гравий в поисках золотых самородков, отделяя бесценное от обыденного.
Пайтонические принципы и трюки
Профессиональное использование filter()
Сочетайте функцию filter()
со стрелочными функциями для осуществления функционального подхода:
filtered_results = filter(lambda x: x if x % 2 == 0 else None, range(10))
Магия оператора 'not in'
С помощью оператора 'not in'
можно исключать элементы с высокой скоростью:
whitelist = {'apples', 'oranges'}
fruits = [f for f in ['apples', 'bananas', 'oranges', 'kiwi'] if f not in whitelist]
Обороты с составной сложностью
Для сложных условий используйте функции с говорящими названиями или автономные генераторы:
def is_prime(num):
# Предполагаем, что здесь функция корректно проверяет простоту числа
pass
primes = (x for x in range(100) if is_prime(x))
Полезные материалы
- PEP 202 – Списковые включения — всестороннее руководство по списковым включениям.
- PEP 308 – Условные выражения — упрощение синтаксиса условий.
- Преображаем код в элегантный, идиоматический Python – YouTube — видео для тех, кто хочет лучше разобраться в языке Python.
- 9. Классы — Генераторные выражения — экономьте память благодаря использованию генераторов.
- Лямбда-выражения и анонимные функции – YouTube — глубокое погружение в мир лямбда-функций с Кори Шефером.
- Справочник по сортировке — Документация Python — для эффективной сортировки данных.
- Принципы написания кода — Руководство по Python — полезные советы по стилю написания кода.