Генераторы списков и словарей
Зачастую нам надо получить список или словарь значений, которые отвечают каким-то требованиям. Обычно это делают следующим образом: создаём пустой массив, запускаем цикл и в нём добавляем те элементы, которые нам нужны. Однако в Python это действие можно сделать куда красивее в одну строчку используя, так называемые, генераторы списков. Рассмотрим пример:
squares = [] # Список квадратов чисел от 1 до 100 for i in range(1, 101): squares.append(i**2)
Теперь рассмотрим пример с генератором списка:
squares = [i**2 for i in range(1, 101)]
Намного короче и красивее. Синтаксис следующий:
[<значение> <условие на значение>]
Во втором блоке может быть однострочный цикл for и не один: никто не запрещает вкладывать один цикл в другой, а так же if. Рассмотрим более сложный пример:
different_pairs = [] # Список всех возможных пар неравных чисел от 0 до 9 for i in range(10): for j in range(10): if i != j: matrix.append((i, j))
А теперь пример с генератором:
different_pairs = [(i, j) for i in range(10) for j in range(10) if i != j]
Красиво, не правда ли? А теперь представьте, что это можно делать не только со списками, но и со словарями. Там синтаксис чуть чуть иной:
{<ключ>:<значение> <условия на них>}
Допустим создадим словарь число : его куб от 0 до 9
cubes = {i: i**3 for i in range(10)}
Несмотря на то, что этот синтаксис довольно красивый, не стоит его использовать для очень сложных конструкций. Надеюсь, статья была вам полезной, и вы узнали что-то новое.
Материал для группы SnakeBlog