LIST INCLUSIONS (LIST COMPREHENSION)

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
219
Reaction score
633
Deposit
0$

Довольно часто мы сталкиваемся с созданием списка посредством итераций по чему-либо, будь то строка или другой список. В конкретном случае отображения (описанном выше) мы создаем новый список, перебирая исходный список.

Примитивный код для этого создания иногда может быть многословным, хотя и понятным (например, для квадратов чисел):
Python:

somelist = [1,2,3,4,5,6,7,8,9]
newlist = []
for i in somelist:
newlist.append(i**2)

Тот же самый код можно удобно записать в видео спискового включения (нам не нравится это название, поэтому отныне я буду называть их «компрехами»):
Python:

somelist = [1,2,3,4,5,6,7,8,9]
newlist = [i**2 for i in somelist]
Вы можете заметить, что наш примитивный код не так уж прост. Обычно мы выполняем как группировку, так и фильтрацию внутри цикла для перед добавлением элемента (например, новый список должен сохранять только квадраты четных чисел). В этом случае мы пишем что-то вроде:
Python:

somelist = [1,2,3,4,5,6,7,8,9]
newlist = []
for i in somelist:
if not i%2:
newlist.append(i**2)

Однако «comprehi» позволяет сделать это довольно лаконично:
Python:

somelist = [1,2,3,4,5,6,7,8,9]
newlist = [i for i in somelist if not i%2]
В общем случае, понятие «compreh» описывается следующим правилом (это также верно для генераторов, но о них мы говорим в других статьях):
Код:

[new_element for new_element in iterable if condition where the element's value is available]
В программируемых логических модулях также доступны вложенные циклы. Они за поворотом слева направо.
Например, чтобы разложить двумерный массив (матрицу) на одномерный, мы обычно пишем что-то вроде:
Python:

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
planar = []
for i in matrix:
for j in i:
planar.append(j)

В результате будет получен одномерный (плоский) массив [1,2,3,4,5,6,7,8,9,10,11,12]

Тот же код на Comprex:

Python:

матрица = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
планар = [j для i в матрице для j в i]
Стоит отметить, что условие по-прежнему записывается в конце, ведь циклы для того, чтобы вложить друг в друга. Все итераторы, обрабатываемые в данный момент циклами, доступны в фундаменте.
[/LIKES]
 
Top Bottom