Генератор списка
Когда новый список строится из значений существующего, генератор списка (list comprehension) позволяет записать это гораздо короче.
Допустим, у вас есть фрукты и вам нужен новый список только с теми, в названии которых есть буква «a».
Длинный способ использует оператор for с проверкой условия внутри:
Пример
Длинный способ, с циклом:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
Пример
Генератор списка делает то же самое одной строкой:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
Синтаксис
Вы получаете новый список, а исходный остаётся без изменений.
Синтаксис
newlist = [expression for item in iterable if condition == True]
Условие
Считайте условие фильтром: элемент проходит, только если проверка даёт True.
Пример
Оставьте все элементы, кроме «apple»:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if x != "apple"]
print(newlist)
Пример
Если опустить оператор if, останутся все элементы:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits]
print(newlist)
Итерируемый объект
Итерируемым объектом может быть любой итерируемый объект, например список, кортеж или множество.
Пример
Функция range() тоже подходит в качестве итерируемого объекта:
Вывод: полная программа на Python
newlist = [x for x in range(10)]
print(newlist)
Пример
Та же идея, но остаются только числа меньше 5:
Вывод: полная программа на Python
newlist = [x for x in range(10) if x < 5]
print(newlist)
Выражение
Выражение сначала представляет собой текущий элемент итерации, а то, что оно даёт в результате, попадает в новый список. Это значит, что по пути туда элемент можно преобразовать.
Пример
Переведите каждое значение в верхний регистр для нового списка:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x.upper() for x in fruits]
print(newlist)
Пример
Сделайте каждое значение в новом списке равным «hello»:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = ['hello' for x in fruits]
print(newlist)
Пример
Поставьте «orange» везде, где появился бы «banana»:
Вывод: полная программа на Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x if x != "banana" else "orange" for x in fruits]
print(newlist)