freeCodeCamp/guide/russian/python/lists/list-comprehension/index.md

5.9 KiB
Raw Blame History

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)] 

Дополнительная информация:

Структуры данных Python - Списки

Python for Loops

Списки Python

Python для начинающих - список понятий