Перейти к основному содержимому

Генератор списка

Когда новый список строится из значений существующего, генератор списка (list comprehension) позволяет записать это гораздо короче.

Допустим, у вас есть фрукты и вам нужен новый список только с теми, в названии которых есть буква «a».

Длинный способ использует оператор for с проверкой условия внутри:

Пример

Длинный способ, с циклом:

Prompt
Напишите программу на Python, которая создаёт список фруктов (apple, banana, cherry, kiwi, mango). С помощью цикла for с проверкой условия создайте новый список, содержащий только фрукты с буквой "a" в названии. Выведите новый список.
Вывод: полная программа на Python

Пример

Генератор списка делает то же самое одной строкой:

Prompt
Напишите программу на Python, которая создаёт список фруктов (apple, banana, cherry, kiwi, mango). С помощью генератора списка создайте новый список, содержащий только фрукты с буквой "a" в названии. Выведите новый список.
Вывод: полная программа на Python

Синтаксис

Вы получаете новый список, а исходный остаётся без изменений.

Синтаксис

main.py
newlist = [expression for item in iterable if condition == True]

Условие

Считайте условие фильтром: элемент проходит, только если проверка даёт True.

Пример

Оставьте все элементы, кроме «apple»:

Prompt
Напишите программу на Python, которая использует генератор списка для списка fruits, чтобы создать новый список, принимающий все элементы, кроме "apple". Выведите новый список.
Вывод: полная программа на Python

Пример

Если опустить оператор if, останутся все элементы:

Prompt
Напишите программу на Python, которая использует генератор списка без оператора if, чтобы скопировать список fruits в новый список. Выведите новый список.
Вывод: полная программа на Python

Итерируемый объект

Итерируемым объектом может быть любой итерируемый объект, например список, кортеж или множество.

Пример

Функция range() тоже подходит в качестве итерируемого объекта:

Prompt
Напишите программу на Python, которая использует генератор списка с функцией range(), чтобы создать список чисел от 0 до 9. Выведите новый список.
Вывод: полная программа на Python

Пример

Та же идея, но остаются только числа меньше 5:

Prompt
Напишите программу на Python, которая использует генератор списка с range(10), чтобы создать список, принимающий только числа меньше 5. Выведите новый список.
Вывод: полная программа на Python

Выражение

Выражение сначала представляет собой текущий элемент итерации, а то, что оно даёт в результате, попадает в новый список. Это значит, что по пути туда элемент можно преобразовать.

Пример

Переведите каждое значение в верхний регистр для нового списка:

Prompt
Напишите программу на Python, которая использует генератор списка для списка fruits, чтобы перевести значения в новом списке в верхний регистр. Выведите новый список.
Вывод: полная программа на Python

Пример

Сделайте каждое значение в новом списке равным «hello»:

Prompt
Напишите программу на Python, которая использует генератор списка для списка fruits, чтобы присвоить всем значениям в новом списке значение 'hello'. Выведите новый список.
Вывод: полная программа на Python

Пример

Поставьте «orange» везде, где появился бы «banana»:

Prompt
Напишите программу на Python, которая использует генератор списка для списка fruits. Верните "orange" вместо "banana", оставив все остальные элементы без изменений. Выведите новый список.
Вывод: полная программа на Python