Генераторы списков в Python
Примеры Python » Python для начинающих python список в строку, python список словарей, python функции списков
У языка программирования Pyrhon есть особая синтаксическая конструкция, с помощью которой можно на основании определенных правил создавать заполненные списки. Формируемые списки могут получаться различными, содержание конструкции может быть разным, поэтому они получили название генераторы списков. Они удобны, потому что записи получаются не такими длинными, нежели при традиционном методе создания списков.
К примеру, нужен список из натуральных чисел до конкретного числа. Традиционный метод будет иметь такой вид:
>>> a = []
>>> for i in range(1,15):
... a.append(i)
...
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Список занял три строчки кода. А генератору нужна только одна:
>>> a = [i for i in range(1,15)]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Конструкция [i for i in range(1,15)] – это генератор списка. Всю конструкции нужно поместить в квадратные списки, что отражает создание списка. Внутри скобок есть три части:
- Что будем делать с элементов (в нашей ситуации не делаем ничего, просто вносим в перечень).
- Что будем брать (мы берем элемент i).
- Откуда будем брать (из объекта range). Для отделения частей используем ключевые слова in и for.
Разберем на примере
>>> a = [2,-2,4,-4,7,5]
>>> b = [i**2 for i in a]
>>> b
[4, 4, 16, 16, 49, 25]
В этой ситуации мы берем каждый элемент перечня и возводим в квадрат. Отсюда:
- Делаем – возводим наш элемент в квадрат.
- Берем – элемент.
- Откуда – из перечня а.
>>> a = {1:10, 2:20, 3:30}
>>> b = [i*a[i] for i in a]
>>> b
[10, 40, 90]
Тут берем ключ в словаре, а в генерируемый список попадает произведение ключа на имеющееся у него значение.
>>> a = {1:10, 2:20, 3:30}
>>> b = [[i,a[i]] for i in a]
>>> b
[[1, 10], [2, 20], [3, 30]]
>>> c = [j for i in b for j in i]
>>> c
[1, 10, 2, 20, 3, 30]
В данном случае список b содержит вложенные списки. Опустив в генераторе квадратные скобы по выражению [i,a[i]] была бы получена ошибка. Если вам нужен одноуровневый перечень с ключами из словарных значений, нужно взять каждый вложенный перечень и уже оттуда брать каждый компонент. Делается это вложенной конструкцией for. Традиционный синтаксис формирования перечня имеет такой вид:
>>> c = []
>>> for i in b:
... for j in i:
... c.append(j)
...
>>> c
[1, 10, 2, 20, 3, 30]
Генераторы списков могут дополняться конструкцией if. К примеру, нужно извлечь все числа из строки:
>>> a = "lsj94ksd231 9"
>>> b = [int(i) for i in a if '0'<=i<='9']
>>> b
[9, 4, 2, 3, 1, 9]
Либо наполнить список цифрами, кратными 31 или 30:
>>> a = [i for i in range(30,250) if i%30 == 0 or i%31 == 0]
>>> a
[30, 31, 60, 62, 90, 93, 120, 124, 150, 155, 180, 186, 210, 217, 240, 248]
Перечни так создаваться намного проще и быстрее. Но, они не годятся для замены достаточно сложных конструкций. К примеру, если в условии проверки будет ветка else.
Закончились деньги, а до зарплаты еще пара недель? Можно одолжить, но что делать если не у кого? Не идти же в банк за кредитом. В этом случае вам помогут микрозаймы. Простой зайдите на сайт, оформите заявку (это очень просто и быстро) и через несколько минут вы получите деньги! Очень удобно и быстро, и главное не нужно ни у кого просить!