"""
Генераторы списков
Генераторы списков — удобный и красивый способ для создания
нового или фильтрации существующего списка. Такую инструкцию
можно записать в одну строку и легко понять даже неподготовленному
человеку. Предположим, что мы хотим создать список из квадратов
чисел из диапазона [1; 10]. Наверное, мы бы сделали это так:
"""
a = []
for i in range(1, 11):
    a.append(i ** 2)
"""
Есть ли способ записать то же самое короче и проще? 
Да — с помощью генератора.
"""
a = [i ** 2 for i in range(1, 11)]
"""
Все генераторы строятся одинаково, по одному шаблону: 
[<что положить в список> for <индекс/элемент> in <диапазон/итерируемый 
тип данных> if <условие>]
Условие может пригодиться, если, например, мы хотим добавить только 
четные числа. Условие также может быть сложным.
Если нам необходимо не только условие if, но и блок else, то подойдет 
следующая схема:
[<положить в список значение> if <условие> else <положить другое значение> 
for <индекс/элемент> in <диапазон/итерируемый тип данных>]
C помощью этой схемы напишем программу, которая выводит нули вместо 
нечетных чисел и квадраты четных чисел на отрезке [1, 100]:
"""
print([x ** 2 if x % 2 == 0 else 0 for x in range(1, 101)])
"""
Еще один пример использования генераторов:
"""
dates = [1964, 2001, 2077, 1914, 1991]  # фильтрация дат
filtered = [date for date in dates if date > 1989]
print(filtered)

2f5d6d5f3b6accccd5741e735ebe00914752617f
<mask token>

<mask token>
for i in range(1, 11):
    a.append(i ** 2)
<mask token>
print([(x ** 2 if x % 2 == 0 else 0) for x in range(1, 101)])
<mask token>
print(filtered)

<mask token>
a = []
for i in range(1, 11):
    a.append(i ** 2)
<mask token>
a = [(i ** 2) for i in range(1, 11)]
<mask token>
print([(x ** 2 if x % 2 == 0 else 0) for x in range(1, 101)])
<mask token>
dates = [1964, 2001, 2077, 1914, 1991]
filtered = [date for date in dates if date > 1989]
print(filtered)

"""
Генераторы списков
Генераторы списков — удобный и красивый способ для создания
нового или фильтрации существующего списка. Такую инструкцию
можно записать в одну строку и легко понять даже неподготовленному
человеку. Предположим, что мы хотим создать список из квадратов
чисел из диапазона [1; 10]. Наверное, мы бы сделали это так:
"""
a = []
for i in range(1, 11):
    a.append(i ** 2)
"""
Есть ли способ записать то же самое короче и проще? 
Да — с помощью генератора.
"""
a = [i ** 2 for i in range(1, 11)]
"""
Все генераторы строятся одинаково, по одному шаблону: 
[<что положить в список> for <индекс/элемент> in <диапазон/итерируемый 
тип данных> if <условие>]
Условие может пригодиться, если, например, мы хотим добавить только 
четные числа. Условие также может быть сложным.
Если нам необходимо не только условие if, но и блок else, то подойдет 
следующая схема:
[<положить в список значение> if <условие> else <положить другое значение> 
for <индекс/элемент> in <диапазон/итерируемый тип данных>]
C помощью этой схемы напишем программу, которая выводит нули вместо 
нечетных чисел и квадраты четных чисел на отрезке [1, 100]:
"""
print([x ** 2 if x % 2 == 0 else 0 for x in range(1, 101)])
"""
Еще один пример использования генераторов:
"""
dates = [1964, 2001, 2077, 1914, 1991]  # фильтрация дат
filtered = [date for date in dates if date > 1989]
print(filtered)
