Списковые включения (List Comprehensions) в Python: Полное руководство
Оглавление
Введение
Списковые включения (List Comprehensions) — мощный и элегантный способ создания, модификации и фильтрации списков в Python. Они позволяют писать более компактный и читаемый код.
Основы списковых включений
Что такое список в Python?
Характеристики списков:
Встроенная составная структура данных
Может содержать элементы разных типов
Упорядоченная коллекция
Изменяемая структура
Определение списковых включений
Списковое включение — это краткий способ создания списка с помощью единой строки кода. Базовый синтаксис:
[выражение for элемент in итерируемый_объект]
Преимущества
Краткость: Меньше кода по сравнению с традиционными циклами
# Традиционный подход
squares = []
for x in [1, 2, 3, 4, 5]:
squares.append(x ** 2)
# Списковое включение
squares = [x ** 2 for x in [1, 2, 3, 4, 5]]
print(squares) # [1, 4, 9, 16, 25]
Сравнение с циклами for
Создание списка чисел:
# Цикл for
numbers = []
for i in range(10):
numbers.append(i)
# Списковое включение
numbers = [i for i in range(10)]
print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Условные операторы
Модификация элементов
# Определение четных и нечетных чисел
old_list = [1, 2, 3, 4, 5]
new_list = ['even' if x % 2 == 0 else 'odd' for x in old_list]
print(new_list) # ['odd', 'even', 'odd', 'even', 'odd']
Фильтрация
# Выбор нечетных чисел
old_list = [1, 2, 3, 4, 5]
new_list = [x for x in old_list if x % 2 == 1]
print(new_list) # [1, 3, 5]
Множественные условия
# Числа, делящиеся на 2 и 5
new_list = [i for i in range(1, 101) if i % 2 == 0 if i % 5 == 0]
print(new_list) # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Вложенные списковые включения
Преобразование вложенного списка:
# Преобразование списка списков в плоский список
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [i for j in nested_list for i in j]
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Поиск общих элементов:
list1 = ['apple', 'orange', 'banana', 'grape']
list2 = ['grapefruit', 'apple', 'grape', 'pear']
common_items = [i for i in list1 if i in list2]
print(common_items) # ['apple', 'grape']
Когда не стоит использовать
Ограничения:
Избегайте слишком сложных включений
Приоритет читаемости кода
Не заменяйте простые циклы громоздкими включениями
Правило: Если включение становится сложным для понимания, используйте традиционный цикл.