Иногда возникает необходимость создать список с определенными значениями элементов. Например, предподсчитать квадраты чисел или получить список вида [1, 2, 3, 4, 5, 6, ...]
, или даже просто получить список заполненный нулями.
Самый простой способ это с помощью метода append
добавлять в конец списка нужные элементы, например:
In [1]:
l = list()
for i in range(10):
l.append(i ** 2)
print(l)
В Python существует более простой способ делать подобные вещи, он называется генератор списка. Для понимания его можно рассматривать как сокращение записи с for, но, формально, он сокращением не является, это просто отдельная конструкция. Например, код, который делает то же самое, что и выше:
In [2]:
l = [i ** 2 for i in range(10)]
print(l)
Как можно попытаться запомнить конструкцию:
имя_списка = [элемент_добавляемый_в_конец for переменная in что-то_списокоподобное]
In [3]:
l = [0 for i in range(10)] # список длины 10 из нулей
print(l)
l1 = [0] * 10 # списки можно как и строки умножать на число, но этот способ имеет свои особенности, лучше генератор
print(l1)
In [4]:
l = [2 ** i for i in range(10)] # список длины 10 из степеней двоек
print(l)
На самом деле генераторы умеют "сокращать" еще более сложную запись. В конце генератора можно написать условие, при выполнении которого элементы будут добавляться. Например:
In [5]:
l = list()
for i in range(10):
if i % 2 == 1:
l.append(i ** 2)
print(l) # в l квадраты нечетных чисел
In [6]:
l = [i ** 2 for i in range(10) if i % 2 == 1]
print(l)
Так же можно делать со списками и строками:
In [7]:
a = [i for i in [1, 2, 3, 4, 5, 6] if i % 2 == 0]
print(a)
In [8]:
b = [c for c in "abcdef"]
print(b)
Часто генератор используют для преобразования типа элемента:
In [9]:
a = [1, 2, 3]
b = [str(i) for i in a]
print(b)
In [10]:
a = ['1', '2', '3']
b = [int(x) for x in a]
print(b)