(Учебное пособие) Список понятий в Python с примерами и кодом.

Что такое понимание списка?

Проще говоря, понимание списка — это сокращение от «цикла for» в Python. Например, если мы хотим возвести каждое число в степень двойки, мы можем выполнить простой цикл for:

range_100_items = range(100)

squares = []
for x in range_100_items:
    squares.append(x**2)

или мы можем просто использовать понимание списка:

range_100_items = range(100)
squares_list_comprehension = [x**2 for x in range_100_items]

Вывод обоих методов одинаков:

print(squares)
print(squares_list_comprehension)
output: [0, 1, 4, 9, 16, 25 …, 9801]

Синтаксис для понимания списка следующий:

list_comprehension_output = [expression for item in list]
list_comprehension_output = [x**2 for x in range_100_items]

В нашем случае:

  • выражение — «x**2»
  • item равен «x»
  • список – это "диапазон_100_элементов".

— не правда ли, очень просто и изящно? :)

Примечание: выражение является обязательным, даже если вы не собираетесь каким-либо образом преобразовывать данные. Просто напишите: [x вместо x в списке]

Как мы можем добавить операторы if в понимание списка:

Есть два места, где мы можем применить оператор if внутри понимания списка:

  1. в конце части списка ввода
  2. в начале в части выражения

Давайте посмотрим, как мы можем использовать оператор if в части списка ввода:

Чтобы возвести в квадрат только числа меньше 50, мы можем просто добавить if в конце, например:

squares_list_comprehension_if = [x**2 for x in range_100_items if x < 50]

Чтобы возводить в степень 2 только числа меньше 50 и больше 40, мы можем просто добавить:

squares_list_comprehension_if_and = [x**2 for x in range_100_items if x < 50 and x > 40]

Давайте посмотрим, как мы можем использовать операторы if в разделе выражений.

Например, чтобы сделать числа меньше 5 в квадрате и добавить 100 к остальным числам, мы можем написать:

squares_and_plus_100_list_comprehension = [x**2 if x < 5 else x+100 for x in range_100_items]

Время для других вариантов использования:

  1. Получить сумму подсписков внутри списка:
matrix = [[1], [10, 20], [30, 40, 50]]
sum_of_lists = [sum(val) for val in matrix]

print(sum_of_lists)

вывод:

[1, 30, 120]

2. Сгладить матрицу из 2d в 1d:

matrix = [[1], [10, 20], [30, 40, 50]]
flatten = [val for val_list in matrix for val in val_list]

print(flatten)

вывод:

[1, 10, 20, 30, 40, 50]

3. Получить все животные из списка кортежей:

input = [(1, 'dog'), (2, 'cat'), (3, 'bird')]
animal_list = [animal[1] for animal in input]

print(animal_list)

вывод:

[‘dog’, ‘cat’, ‘bird’]

4. Сгенерируйте нулевую матрицу 2x10

zero_matrix = [[0 for col in range(2)] for row in range(10)]

вывод:

[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]

Надеюсь, этот урок будет полезен!