5.9 KiB
title | localeTitle |
---|---|
List Comprehension | Учет списка |
Учет списка
List Comprehension - это способ перебирать список, чтобы создать новый список, основанный на некоторых условиях. Сначала это может сбивать с толку, но как только вы приспосабливаетесь к синтаксису, он очень мощный и быстрый.
Первым шагом в обучении использованию понимания списка является просмотр традиционного способа перебора списка. Ниже приведен простой пример, который возвращает новый список четных чисел.
# Example list for demonstration
some_list = [1, 2, 5, 7, 8, 10]
# Empty list that will be populate with a loop
even_list = []
for number in some_list:
if number % 2 == 0:
even_list.append(number)
# even_list now equals [2, 8, 10]
Сначала создается список с некоторыми числами. Затем вы создаете пустой список, который будет удерживать ваши результаты в цикле. В цикле вы проверяете, является ли каждое число делимым на 2, и если вы добавите его в список четных. Это заняло 5 строк кода, не включая комментарии и пробелы, что в этом примере мало.
Теперь для примера понимания списка.
# Example list for demonstration
some_list = [1, 2, 5, 7, 8, 10]
# List Comprehension
even_list = [number for number in some_list if number % 2 == 0]
# even_list now equals [2, 8, 10]
Другой пример, с теми же двумя шагами: Ниже будет создан список номеров, соответствующих номерам в my_starting_list
умноженном на 7.
my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_new_list = []
for item in my_starting_list:
my_new_list.append(item * 7)
Когда этот код запускается, конечным значением my_new_list
является: [7, 14, 21, 28, 35, 42, 49, 56]
Разработчик, использующий понимание списков, может достичь того же результата, используя следующее понимание списка, которое приводит к тому же my_new_list
.
my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_new_list = [item * 7 for item in my_starting_list]
Простая формула для записи в способе составления списка:
my_list = [{operation with input n} for n in {python iterable}]
Замените {operation with input n}
однако вы хотите изменить элемент, возвращенный из итерабельного. В приведенном выше примере используется n * 7
но операция может быть как простой, так и сложной по мере необходимости.
Замените {python iterable}
любым итерабельным. Типы последовательности будут наиболее распространены. Список был использован в приведенном выше примере, но кортежи и диапазоны также распространены.
Понимание списка добавляет элемент из существующего списка в новый список, если выполняется какое-либо условие. Он более аккуратный, но в большинстве случаев он намного быстрее. В некоторых случаях понимание списка может затруднять читаемость, поэтому разработчик должен взвесить свои параметры, когда вы выбираете использование списка.
Примеры понимания списка с помощью условных выражений
Поток управления в списках можно контролировать с помощью условных выражений. Для exmaple:
only_even_list = [i for i in range(13) if i%2==0]
Это эквивалентно следующему циклу:
only_even_list = list()
for i in range(13):
if i%2 == 0:
only_even_list.append(i)
Учет списка также может содержать вложенные условия. Рассмотрим следующий цикл:
divisible = list()
for i in range(50):
if i%2 == 0:
if i%3 == 0:
divisible.append(i)
Используя понимание списка, это можно записать так:
divisible = [i for i in range(50) if i%2==0 if i%3==0]
Оператор If-Else также может использоваться вместе со списком.
list_1 = [i if i%2==0 else i*-1 for i in range(10)]