Введение в понимание списков

Python предоставляет конструкции понимания списков, которые позволяют легко определять списки, фильтровать списки, создавать новые списки на основе существующих списков и многое другое. По сравнению с традиционными «циклами for», понимание списков является гораздо более лаконичной и удобочитаемой альтернативой созданию списков в Python. В этом посте мы обсудим, как использовать понимание списков для создания списков в Python. Мы также сравним подход к пониманию списка с использованием традиционных «циклов for» в каждом примере.

Давайте начнем!

Во-первых, давайте рассмотрим задачу создания списка положительных целых чисел от 1 до 10 в «цикле for». Давайте инициализируем список под названием pos_list:

pos_list = []

Мы можем добавлять значения в этот список, перебирая генератор, возвращаемый методом range () в цикле for:

for i in range(1, 11):
    pos_list.append(i)

Распечатаем получившийся список:

print(pos_list)

Это достаточно просто. Теперь предположим, что мы хотим сгенерировать список четных целых чисел. Мы можем добавить условие, которое проверяет, делится ли элемент на 2, и добавлять его только тогда, когда условие истинно:

even_list = []
for i in range(1, 11):
    if i%2 == 0:
        even_list.append(i)

Распечатаем результат:

print(even_list)

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

lc_pos_list = [i for i in range(1,11)]
print(lc_pos_list)

Сравните это с тремя исходными строками кода, которые нам пришлось использовать с «for-loop»:

for i in range(1, 11):
    pos_list.append(i)
print(pos_list)

Давайте теперь воспользуемся пониманием списка, чтобы создать четный список:

lc_even_list = [i for i in range(1,11) if i%2]
print(lc_even_list)

Тем не менее, здесь используются только две строки кода по сравнению с пятью строками кода, использующими циклы for:

even_list = []
for i in range(1, 11):
    if i%2 == 0:
        even_list.append(i)
print(even_list)

Мы также можем довольно легко фильтровать списки, используя понимание списков. Давайте рассмотрим задачу фильтрации значений меньше пяти из нашего списка положительных целых чисел с помощью цикла for:

pos_list_gt_5 = []
for i in pos_list:
    if i >= 5:
      pos_list_gt_5.append(i)
print(pos_list_gt_5)

И используя понимание списка:

lc_pos_list_gt_5 = [i for i in pos_list if i >= 5]
print(lc_pos_list_gt_5)

Как видите, мы использовали гораздо меньше кода. Затем давайте рассмотрим задачу перебора нескольких списков с использованием их понимания. Предположим, у нас есть список целых чисел от 1 до 10 и еще один список целых чисел от 20 до 30:

pos_list2 = []
for i in range(20, 30):
    pos_list2.append(i)
print(pos_list)    
print(pos_list2)

Давайте напишем цикл for, выполняющий итерацию по обоим спискам, и добавим результат их элементов в новый список:

multiply_list = []
for i, j in zip(pos_list, pos_list2):
        multiply_list.append(i*j)
        
print(multiply_list)

Мы можем выполнить ту же операцию, используя понимание списка:

lc_multiply_list = [i*j for i,j in zip(pos_list, pos_list2)]
print(lc_multiply_list)

Мы даже можем применить условия. Добавим произведение элементов, произведение которых меньше 200:

lc_multiply_list_filter = [i*j for i,j in zip(pos_list, pos_list2) if i*j < 200]
print(lc_multiply_list_filter)

Я остановлюсь на этом, но я призываю вас поиграть с кодом самостоятельно.

ВЫВОДЫ

Подводя итог, в этом посте мы обсудим, как создавать списки, используя понимание списков в python. Мы показали, что, хотя мы можем выполнять те же задачи, используя циклы for, понимание списков обеспечивает гораздо более простой и читаемый способ построения списков. Я надеюсь, вы нашли этот пост полезным / интересным. Код в этом посте доступен на GitHub. Спасибо за чтение!