Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Генераторы списков в 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)] – это генератор списка. Всю конструкции нужно поместить в квадратные списки, что отражает создание списка. Внутри скобок есть три части:

  1. Что будем делать с элементов (в нашей ситуации не делаем ничего, просто вносим в перечень).
  2. Что будем брать (мы берем элемент i).
  3. Откуда будем брать (из объекта range). Для отделения частей используем ключевые слова in и for.

Разберем на примере


>>> a = [2,-2,4,-4,7,5]
>>> b = [i**2 for i in a]
>>> b
[4, 4, 16, 16, 49, 25]

В этой ситуации мы берем каждый элемент перечня и возводим в квадрат. Отсюда:

  1. Делаем – возводим наш элемент в квадрат.
  2. Берем – элемент.
  3. Откуда – из перечня а.

>>> 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.

Закончились деньги, а до зарплаты еще пара недель? Можно одолжить, но что делать если не у кого? Не идти же в банк за кредитом. В этом случае вам помогут микрозаймы. Простой зайдите на сайт, оформите заявку (это очень просто и быстро) и через несколько минут вы получите деньги! Очень удобно и быстро, и главное не нужно ни у кого просить!

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)