Новости программирования

Понимания в Python

Краткое описание по статье Понимания в Python

Название: Понимания в Python . Краткое описание: ⭐ Python предоставляет понимание как удобную функцию . Дата публикации: 15.01.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года


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

Python поддерживает 4 типа понимания для создания различных типов последовательностей.

  • Понимание списка.
  • Понимание словаря.
  • Установить понимание.
  • Понимание генератора.

В этой статье мы рассмотрим их все на нескольких основных примерах. Как только вы познакомитесь с одним из них, вы сможете легко работать с другими типами.

Понимание списка

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

list_out = [<expression(item)> for item in iter_in if <condition(item)>]

Этот процесс выполняет итерацию по итерируемому объекту iter_in и передать элементы в промежуточную логику <expression(item)> перед добавлением их в list_out, если <condition> указано, то элементы фильтруются по этому условию перед передачей их в выражение. Этот процесс похож на следующий типичный синтаксис.

list_out = []
for item in iter_in:
  if condition(item) == True:
    item_new = expression(item)
    list_out.append(item)

✨ Пример | Понимание списка

Давайте использовать range функция для создания списка номеров (из -10 к 10), затем мы применим понимание списков для создания новых разных списков.

n_list = list(range(-10, 11))
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Теперь мы можем использовать генераторы списков для создания списка, содержащего квадраты элементов из списка. n_list.

n_list_1 = [num ** 2 for num in n_list]

Когда условие опущено, все элементы из n_list передаются в выражение num ** 2 и добавлен в новый список n_list_1.

[100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Если мы хотим фильтровать только положительные значения, мы можем добавить условие num >= 0 следующее.

n_list_2 = [num ** 2 for num in n_list if num >= 0]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Мы также можем добавить еще один if операторы, которые работают как вложенные if блоки или как and комбинация. Второе условие можно использовать для фильтрации нечетных значений следующим образом:

n_list_3 = [num ** 2 for num in n_list if num >= 0 if num % 2 != 0]

Итак, теперь у нас есть только квадраты положительных нечетных чисел из исходного списка.

[1, 9, 25, 49, 81]

Также можно использовать различные виды итераций в качестве входных данных, таких как enumerate объект.

n_list_4 = [num ** 2 for (i, num) in enumerate(n_list) if num >= 0 and i % 2 == 0]

То enumerate функция возвращает кортеж пар (индекс, значение) из входного списка, так что оба индекса i и ценность num может использоваться в условии фильтрации или в выражении.

Предыдущее понимание приводит к списку, содержащему квадраты положительных значений, которые имеют четный индекс в списке.

[0, 4, 16, 36, 64, 100]

Понимание словаря

Словари могут быть созданы с использованием понимания словаря со следующим основным синтаксисом:

dict_out = [<get_key(item)>: <get_value(item)> for item in iter_in if <condition>]

Здесь <get_key(item)> представляет собой выражение, представляющее ключ и <get_value(item)> представляет собой выражение, представляющее значение для каждой записи в выходном словаре. оба выражения могут быть функцией элемента из входного итерируемого объекта. и, наконец, <condition> необязательно фильтровать элементы перед добавлением их в словарь.

Этот процесс похож на следующий типичный синтаксис:

dict_out = dict()
for item in iter_in:
  if condition(item) == True:
    key = get_key(item)
    value = get_value(item)
    dict_out[key] = value

✨ Пример | Понимание словаря

Давайте разделим английскую идиому “Better late than never” в набор уникальных слов, затем мы применим словарное понимание, чтобы создать новый словарь, содержащий слова в качестве ключей и их индексы в наборе в качестве значений.

words = set("Better late than never".split(" "))
{'Better', 'late', 'never', 'than'}

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

words_ind = {word: i for i, word in enumerate(words)}
{'Better': 0, 'late': 1, 'never': 2, 'than': 3}

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

ind_words = {val: key for key, val in words_ind.items()}
{0: 'Better', 1: 'late', 2: 'never', 3: 'than'}

При желании мы можем добавить условие для фильтрации записей, например сохранение только слов определенной длины.

ind_words_lim = {val: key for key, val in words_ind.items() if len(key) < 6}
{1: 'late', 2: 'never', 3: 'than'}

Установить понимание

Как и в случае со списком, мы можем создать набор, используя тот же синтаксис, но заключив его в фигурные скобки. {}.

set_out = {<expression(item)> for item in iter_in if <condition(item)>}

Этот синтаксис подобен следующему типичному коду.

set_out = set()
for item in iter_in:
  if condition(item) == True:
    item_new = expression(item)
    set_out.add(item_new)

✨ Пример | Установить понимание

Создадим список случайных чисел из 0 к 10 с возможными дубликатами, тогда мы применим набор понятий, чтобы создать набор уникальных номеров из списка.

from random import randint

random_list = [randint(0, 10) for i in range(10)]
[3, 4, 6, 9, 0, 9, 7, 4, 5, 9]

Теперь мы можем применить понимание множества к списку следующим образом.

n_set_1 = {num for num in random_list}
{0, 3, 4, 5, 6, 7, 9}

Кроме того, мы можем указать условие для фильтрации только нечетных значений.

n_set_2 = {num for num in random_list if num % 2 != 0}
{3, 5, 7, 9}

Понимание генератора

Наконец, понимание генератора также очень похоже на понимание списка в синтаксисе, где понимание генератора заключено между круглыми скобками. () вместо квадратных скобок.

Еще одно существенное отличие состоит в том, что генератор генератора не выделяет память для всех элементов сразу, как список, а вместо этого генерирует элементы постепенно один за другим по мере прохождения итерации, поэтому он может повысить производительность памяти.

gen_out = (<expression(item)> for item in iter_in if <condition(item)>)

Можно добиться того же результата, используя типовой код.

def generate_out(iter_in):
  for item in iter_in:
    if condition(item) == True:
      item_new = expression(item)
      yield item_new

gen_out = generate_out()

✨ Пример | Понимание генератора

Для этого примера создадим список чисел из 0 к 10, то мы применим понимание генератора, чтобы создать генератор нечетных чисел из 0 к 10.

n_list = list(range(10))
gen_out = (num for num in n_list if num % 2 != 0)

Теперь мы можем перебирать сгенерированные элементы, используя next встроенная функция или for .. in .. утверждение.

print(next(gen_out))
print(next(gen_out))
print(next(gen_out))
1
3
5

Ну наконец то !

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

Читайте другие мои статьи 🔥

Геопространственные данные в Python — интерактивная визуализация
Горячее кодирование в науке о данных

Ресурсы 📚

Структуры данных в Python


Source: codementor.io/community/new

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Кнопка «Наверх»