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

Несмотря на столь серьезное название, генератор списков в Python представляет собой не что иное, как простой и короткий способ создания списков. Этот элегантный способ был создан для того, чтобы упростить жизнь программистам, избавив от лишней «писанины». Давайте рассмотрим простой пример создания списка целых чисел от 0 до 10 двумя способами: стандартным, и с помощью генератора списков

Cоздание списка целых чисел от 0 до 10

1. Стандартный способ:
list = []
for i in range(10):
    list.append(i)

# вывод на экран:
print(list)
# результат на экране:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
2. Используем генератор списков:
list = [i for i in range(10)]

# вывод на экран:
print(list)

# результат на экране:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Итоговые результаты обоих способов одинаковы, однако, конструкция с генератором списков выглядит более лаконичной (1 строка против 3-х!).

Рассмотрим подробнее, что же представляет собой конструкция генератора списков. В рассмотренном выше примере эта конструкция заключена в квадратные скобки и выглядит как [ i for i in range(10) ]. Квадратные скобки указывают на создаваемый в Python список. А запись внутри скобок можно расшифровать как: [добавить i для i из промежутка целых чисел: (0, 10)]. Таким образом, обобщенная запись генератора списка будет выглядеть как:

new_list = [ добавить {имя_элемента} для {имя_элемента}, удовлетворяющего условиям {условия}] 

У нас появился Telegram-канал для изучающих Python! Присоединяйтесь: вместе «питонить» веселее! 😉 Ссылка на канал: «Кодим на Python!»


В предыдущем примере мы рассматривали создание простейшего списка. Давайте рассмотрим задачку посложнее и создадим список натуральных чисел от 1 до 10, делящихся на 3 без остатка:

Создание списка натуральных чисел, кратных трем:

Так как ноль не относится к натуральным числам, то в данном примере будем рассматривать промежуток (1, 10)

1. Обычный способ:
a = []
for i in range(1,10):
    if i%3 == 0:
        a.append(i)

# вывод на экран
print(a)
# результат на экране
[3, 6, 9]
2. Используем конструкцию генератора списков:
a = [i for i in range(10) if i%3 == 0]

# вывод на экран
print(a)
# результат на экране
[3, 6, 9]

В данном примере конструкция генератора списков позволила сократить код на 3 строки!

Замена символов в текстовых списках обычным способом и используя генератор списков в Python

Рассмотрим еще один пример удачного применения генератора списков. На этот раз в качестве исходных данных будет список text_list со словами. Нужно заменить в словах списка букву «к» на «т».

1. Стандартный способ:
text_list = ["кот", "ком", "кем"]
new_text_list = []
for word in text_list:
    word = word.replace("к", "т")
    new_text_list.append(word)
text_list = new_text_list

print(text_list)
 # результат на экране:
 ['тот', 'том', 'тем'] 
2. При помощи конструкции генератора списков:
text_list = ["кот", "ком", "кем"]
text_list = [word.replace("к", "т") for word in text_list]
print(text_list)
 # результат на экране:
 ['тот', 'том', 'тем'] 

В результате выполнения кода, написанного первым и вторым способом, изначальный список text_list = [«кот», «ком», «кем»] был успешно преобразован в список text_list = [‘тот’, ‘том’, ‘тем’]. Однако первый вариант кода занял 6 строк и потребовал создания новой переменной new_text_list. В то время, как второй вариант занял всего 2 строки без необходимости создания новых переменных. Это в очередной раз подтверждает эффективность использования конструкции генератора списка!

Не стоит рассматривать генератор списков, как необходимую конструкцию для программирования в Python. Без него вполне можно обойтись, используя стандартные условные операторы. В то же время, генератор списков — довольно удобная, лаконичная и интуитивно понятная конструкция, которая, действительно, может уменьшить количество кода без падения эффективности. Поэтому многие программисты вполне заслуженно любят использовать эту конструкцию в своем коде!

Добавить комментарий