Генераторы списков - это компактный способ создания списков в Python, используя выражение вместо цикла for. Они позволяют нам создавать списки более эффективно и уменьшает количество строк кода.
Синтаксис генератора списка выглядит следующим образом
[выражение for переменная in последовательность if условие]
`выражение` - выражение, которое применяется к каждому элементу последовательности для создания нового элемента списка.
`переменная` - переменная, которая представляет каждый элемент последовательности.
`последовательность` - последовательность элементов, например, список, кортеж, строка или диапазон.
`условие` (необязательно) - условие, которому должен соответствовать элемент для включения его в список. Если условие не указано, все элементы последовательности будут включены.
1. Создание списка квадратов чисел от 0 до 9
squares = [x ** 2 for x in range(10)]
print(squares) # Вывод: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2. Фильтрация списка, оставляя только четные числа
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers) # Вывод: [2, 4, 6, 8, 10]
3. Создание списка строк в верхнем регистре
words = ["apple", "banana", "cherry"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # Вывод: ['APPLE', 'BANANA', 'CHERRY']
4. Генератор списка для строки
string = "hello"
characters = [char for char in string]
print(characters) # Вывод: ['h', 'e', 'l', 'l', 'o']
5. Использование вложенных генераторов списков
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_matrix = [x for row in matrix for x in row]
print(flattened_matrix) # Вывод: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Вы можете использовать генератор списка с несколькими условиями, добавляя дополнительные условия после основного цикла for или внутри выражения, которое формирует элементы списка.
Генератор списка с двумя условиями
Мы используем ключевое слово `and`, чтобы объединить два условия в одно. Этот подход подходит, когда вам нужно применить несколько условий к каждому элементу:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = [x for x in numbers if x % 2 == 0 and x > 5]
print(filtered_numbers) # Вывод: [6, 8, 10]
Генератор списка с условиями внутри выражения
Мы используем условное выражение (тернарный оператор) внутри генератора списка. Это позволяет нам применять разные преобразования к элементам в зависимости от их соответствия определенному условию:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = [x if x % 2 == 0 else 0 for x in numbers if x > 5]
print(filtered_numbers) # Вывод: [6, 0, 8, 0, 10]