Генератор списков в Python
Генератор списков - эта такая конструкция языка Python, позволяющая одной строчкой кода создать список. Синтаксически генератор списков можно представить в виде следующего шаблона: [выражение for x in коллекция], где скобки являются начальной и конечной точкой генератора, выражение будет подставляться в итоговый список, а цикл for перебирает исходную последовательность. Перейдем к коду:
y = [8 for x in range(1,10)] # 8 - это простейшее выражение, range(1,10) - коллекция, генерирует значения от 1 до 9 включительно
# вывод:
print(y)
# [8, 8, 8, 8, 8, 8, 8, 8, 8]
Если вместо выражения 8 подставить значение x, наш список заполнится цифрами от 1 до 9:
y = [x for x in range(1,10)] # x примет значение от 1 до 10
print(y)
#вывод:
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
То же справедливо и для x в квадрате:
y = [x**2 for x in range(1,10)]
print(y)
# Подобные операции возможны и со строками:
s = [x for x in "mylist"]
print(s)
# вывод:
['m', 'y', 'l', 'i', 's', 't'] # список строковых символов
# Дублирование строковых символов
s = [x*4 for x in "mylist"]
print(s)
# вывод:
['mmmmm', 'yyyyy', 'lllll', 'iiiii', 'sssss', 'ttttt']
Также в качестве выражение в генератор можно передавать какую-либо функцию, возьмем для примера функцию list(), превращающую каждый элемент списка в отдельный список:
f = [list(i) for i in "HelloWorld"]
print(f)
# вывод:
[['H'], ['e'], ['l'], ['l'], ['o'], ['W'], ['o'], ['r'], ['l'], ['d']]
Более наглядно работу генератора можно рассмотреть на примере генерации списка случайных чисел. Для этого прежде все импортируем модуль random:
import random # импорт модуля
r = [random.randint(-20, 20) for x in range(20)] # вызов метода randint(-20, 20) для генерации случайных чисел в указанном деапазоне
print(r)
# вывод:
[12, 10, 14, 19, -14, 19, 17, 2, -17, -10, 0, 2, -16, -12, 5, -3, -8, 7, 18, -3]
#Генераторы поддерживают возможность работы с условиями, в данном случае шаблон генератора выглядит так:
#[выражение for x in коллекция if условие]
r2 = [x for x in r if x%2==0 ] # нахождение всех четных чисел в списке r
print(r2)
# вывод:
# [12, 10, 14, -14, 2, -10, 0, 2, -16, -12, -8, 18]
Такая сложная на первый взгляд конструкция, позволяет в одной строчке кода выразить более громоздкие конструкции, где сначала требуется создать пустой список, затем цикл и отдельно генератор, что конечно же более удобно и более экономично.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.