Составление списков в Python

List Comprehensions Python



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

Для цикла в Python

Оператор цикла for в Python последовательно выполняет итерацию по членам любого объекта, списка, строки и т. Д. По сравнению с другими языками программирования, его синтаксис намного чище и не требует ручного определения шагов итерации и начала итерации. Хотя есть способы сделать его поведение таким же, как и в других языках программирования (в этой статье не рассматриваются). Вы также можете осуществлять некоторый контроль над циклами for, используя такие операторы, как continue, break, pass и т. Д. Ниже приведен простой пример цикла for в Python:







дляИксв диапазон(10):
Распечатать(Икс)

Цикл for выше напечатает десять чисел, начиная с 0 и заканчивая 9.



Составить список

Понимание списков - это не что иное, как сокращенный / краткий способ написать многострочный цикл for в однострочном операторе. В приведенном ниже примере понимания списка будет создан новый список как [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] путем включения в него всех значений x.



числазнак равно [ИксдляИксв диапазон(10)]
Распечатать (числа)

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





числазнак равно []
дляИксв диапазон(10):
числа.добавить(Икс)

Распечатать (числа)

Производительность и читаемость

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

Пример: использование синтаксиса составления списков со словарями и наборами

Словарь Python - это набор элементов, определенных в парах «ключ-значение», а набор - это набор уникальных значений, дублирование которых не допускается. Понимание списков также может использоваться со словарями и наборами Python. Синтаксис немного отличается: вместо того, чтобы заключать выражение в квадратные скобки, теперь вам придется использовать фигурные скобки. Вы также получите новый объект словаря / набора вместо нового списка.



данныезнак равно {'город':'Нью-Йорк', 'имя':'Джон Доу'}

форматированные_данныезнак равно {к: v.заглавие() дляк,vвданные.Предметы()}

Распечатать (форматированные_данные)

В приведенном выше примере строковые значения преобразуются в регистр заголовка и создается новый словарь с именем formatted_data, вывод которого будет следующим: {‘city’: ‘New York’, ‘name’: ‘John ​​Doe’}. Вы также можете изменить словарь / установить на месте, указав существующую переменную словаря с левой стороны.

данныезнак равно {'город':'Нью-Йорк', 'имя':'Джон Доу'}

данныезнак равно {к: v.заглавие() дляк,vвданные.Предметы()}

Распечатать (данные)

Без использования словарных интерпретаций код выглядел бы так:

данныезнак равно {'город':'Нью-Йорк', 'имя':'Джон Доу'}

форматированные_данныезнак равно {}

дляк,vвданные.Предметы():
форматированные_данные[к] знак равноv.заглавие()

Распечатать (форматированные_данные)

Поскольку в наборах нет пар ключ-значение, понимание набора может быть определено так же, как понимание списка. Единственное отличие - использование фигурных скобок.

Пример: несколько циклов For в понимании списка

Упомянутый выше пример понимания списка является базовым и использует единственный оператор for. Ниже приведен пример использования нескольких циклов for и условного оператора if.

прилагательныезнак равно ['Диск', 'Эоан', 'Focal', 'Хитрый']

животныезнак равно ['Динго', 'Горностай', 'Яма', 'Бобер']

кодовые именазнак равно [х +''+ идляИксвприлагательныедляа такжевживотныееслиа также.начинается с(Икс[0])]

Распечатать (кодовые имена)

Код покажет [‘Disco Dingo’, ‘Eoan Ermine’, ‘Focal Fossa’] в качестве вывода. Два цикла for проходят над прилагательными и списками животных, а их члены объединяются с помощью пробела, только если первые буквы обоих слов совпадают. Без использования списков, код выглядел бы так:

прилагательныезнак равно ['Диск', 'Эоан', 'Focal', 'Хитрый']
животныезнак равно ['Динго', 'Горностай', 'Яма', 'Бобер']

кодовые именазнак равно []

дляИксвприлагательные:
дляа такжевживотные:
еслиа также.начинается с(Икс[0]):
кодовые имена.добавить(х +''+ и)

Распечатать (кодовые имена)

Пример: понимание списка с условием if-else

В приведенном ниже примере показано использование операторов if и else в составлении списков.

number_listзнак равно [1, 2, 3, 4]
другой_листзнак равно [5, 6, 7, 8]

результатзнак равно [Правда если (х + у)%2 == 0 еще Ложь дляИксвnumber_listдляа такжевдругой_лист]

Распечатать (результат)

При просмотре двух списков приведенное выше понимание списка проверяет, является ли сумма пары элементов четной или нет. Выполнение приведенного выше кода покажет вам [Истина, Ложь, Истина, Ложь, Ложь, Истина, Ложь, Истина, Истина, Ложь, Истина, Ложь, Ложь, Истина, Ложь, Истина] в качестве вывода. Без использования списка, код выглядел бы так:

number_listзнак равно [1, 2, 3, 4]
другой_листзнак равно [5, 6, 7, 8]
результатзнак равно []

дляИксвnumber_list:
дляа такжевдругой_лист:
если (х + у)%2 == 0:
результат.добавить(Правда)
еще:
результат.добавить(Ложь)

Распечатать (результат)

Заключение

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