Рубрики
Без рубрики

Понимание списка в Python – полезное иллюстрированное руководство

В этой статье вы узнаете все, что вам нужно знать о понимании списка в Python. Еженаправленные новичками, эксперты не могут жить без этого …

Автор оригинала: Chris.

Понимание списка является компактным способом создания списков. Простая формула [Выражение + контекст] .

  • Выражение: Что делать с каждым элементом списка?
  • Контекст: какие элементы выбрать? Контекст состоит из произвольного количества для и если заявления.

Пример [X для X в диапазоне (3)] Создает список [0, 1, 2] .

Удаление новичков, опытных кодеров Python не может жить без этой удивительной функции Python.

В этом интерактивном руководстве вы узнаете все, что нужно знать о понимании списка в Python.

Готовый? Пойдем!

Посмотрите на следующий интерактивный кодовый фрагмент – вы можете выяснить, что напечатано в оболочке? Продолжай и нажмите «Беги», чтобы увидеть, что произойдет в коде:

Я объясню обе способы создания нового списка в следующем.

Пример: что в любом случае понимание списка?

Понимание списка – это краткий способ создания списков. Скажем, вы хотите отфильтровать всех клиентов из вашей базы данных, которые зарабатывают более 1 000 000 долларов. Это то, что новичок не знает, понимание списка будет делать:

# (name, $-income)
customers = [("John", 240000),
             ("Alice", 120000),
             ("Ann", 1100000),
             ("Zach", 44000)]

# your high-value customers earning <$1M
whales = []
for customer, income in customers:
    if income>1000000:
        whales.append(customer)
print(whales)
# ['Ann']

Этот фрагмент нуждается в четырех строках, чтобы создать список высококачественных клиентов (китов)!

Если вы сделаете это в вашей общедоступной основе Python Code Code, будьте готовы получить выгоду для «не написания кода Pythonic». If you do that in your public Python code base, be prepared to get busted for “not writing Pythonic code”. 😉

Вместо этого гораздо лучший способ сделать то же самое – использовать список пометков:

whales = [x for x,y in customers if y>1000000]
print(whales)
# ['Ann']

Красивая, не так ли?

Понимание списка мертвое просто, если вы знаете формулу, я покажу вам в данный момент. Так почему же люди смущаются о том, как использовать понимание списка? Поскольку они никогда не смотрели на самое важное заявление о понимании списка в документации Python. Это это:

«Понимание списка состоит из скобок, содержащих выражение, сопровождаемое предложение для предложения, то ноль или более для или если пункты. Результат станет новым списком, полученным в результате оценки экспрессии в контексте для И если пункты, которые следуют за этим ».

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

Формула: Понимание списка состоит из двух частей.

«[‘+ выражение + контекст +’] ‘

Первая часть – это выражение. The first part is the expression. In the example above it was the variable x . But you can also use a more complex expression such as x.upper() . Use any variable in your expression that you have defined in the context within a loop statement . See this example: В приведенном выше примере это была переменная

whales = [x.upper() for x,y in customers if y>1000000]
print(whales)
# ['ANN']

Вторая часть – контекст Отказ Контекст состоит из произвольного количества и если пункты Отказ Одна цель контекста – определить (или ограничить) последовательность элементов, на которых мы хотим применить выражение. Вот почему вы иногда видите сложные ограничения, такие как это:

small_fishes = [x + str(y) for x,y in customers if y<1000000 if x!='John']
# (John is not a small fish...)
print(small_fishes)
# ['Alice120000', 'Zach44000']

Альбрехт, один из лояльных читателей моего курса электронной почты «Coffee Break Python», отметил, что вы можете сломать формулу, используя следующий план:

lst = [ for  in  if ] 

Конечно, это только один из способов определения понимания списка, так как также можно указать «else», а также несколько вложенных вложенных и если выступления. Тем не менее, я нашел этот способ примерки контекста большой образовательной стоимости. Это быстро даст вам хорошую интуицию о том, как применять список пониманий на практике.

Понимание списка легко, как только вы вложили один или два перерыва на кофе в ваше тщательное понимание. Подумайте об этом! Если вам интересно, почему я дискретизирую время на короткие 5-минутные слоты под названием «Кофе-брейки», прочитайте мою книгу « Кофе-брейк Python »;).

Подводя итог, помните эту формулу из этой статьи: список пометков = [+ Выражение + контекст +] Отказ

Как работает вложенный список в Python?

После публикации первой версии этой статьи многие читатели попросили меня написать последующую статью о состоянии вложенного списка в Python. Есть две интерпретации вложенного списка понимания:

  • Приходя с компьютерной науки, я предполагал, что «комплекс вложенного списка» относится к созданию Список списков Отказ Другими словами: Как создать вложенный список с пониманием списка?
  • Но после немного исследований я узнал, что есть вторая интерпретация вложенного списка понимания: Как использовать вложенное для петли в списке понимание?

Давайте сначала погрузимся в первую интерпретацию.

Как создать вложенный список с пониманием списка?

Можно создать вложенный список с пониманием списка в Python. Что такое вложенный список? Это список списков. Вот пример:

## Nested List Comprehension
lst = [[x for x in range(5)] for y in range(3)]
print(lst)
# [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

Вы также можете визуализировать поток выполнения этого кода, нажав Далее в браузере:

Как видите, мы создаем список с тремя элементами. Каждый элемент списка – это список самостоятельно.

Все становится ясно, когда мы вернемся к нашей магической формуле понимания списка: [Выражение + контекст] Отказ Часть выражения генерирует новый список, состоящий из 5 целые числа Отказ Контекстная часть повторяет это три раза. Следовательно, каждый из трех вложенных списков имеет пять элементов.

Если вы продвинутый программист, вы можете спросить, есть ли здесь некоторое псевдонирование. Псевдонимы в этом контексте означает, что три элемента списка указывают на тот же список If you are an advanced programmer, you may ask whether there is some aliasing going on here. Aliasing in this context means that the three list elements point to the same list [0, 1, 2, 3, 4]

l[0].append(5)
print(l)
# [[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
# ... and not [[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]]

Как использовать вложенное для петли в списке понимание?

Быть Фрэнком, последний – это супер-простые вещи. Вы помните формулу понимания списка (= [+ Выражение + контекст +] )?

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

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

Предположим, вы хотите использовать список пониманий, чтобы сделать этот код более лаконичным (например, вы хотите найти все возможные пары пользователей в вашей социальной сети):

# BEFORE
users = ["John", "Alice", "Ann", "Zach"]
pairs = []
for x in users:
    for y in users:
        if x != y:
            pairs.append((x,y))
print(pairs)
#[('John', 'Alice'), ('John', 'Ann'), ('John', 'Zach'), ('Alice', 'John'), ('Alice', 'Ann'), ('Alice', 'Zach'), ('Ann', 'John'), ('Ann', 'Alice'), ('Ann', 'Zach'), ('Zach', 'John'), ('Zach', 'Alice'), ('Zach', 'Ann')]

Теперь этот код – беспорядок! Как мы можем исправить это? Просто используйте вложенный список!

# AFTER
pairs = [(x,y) for x in users for y in users if x!=y]
print(pairs)
# [('John', 'Alice'), ('John', 'Ann'), ('John', 'Zach'), ('Alice', 'John'), ('Alice', 'Ann'), ('Alice', 'Zach'), ('Ann', 'John'), ('Ann', 'Alice'), ('Ann', 'Zach'), ('Zach', 'John'), ('Zach', 'Alice'), ('Zach', 'Ann')]

Как видите, мы делаем точно так же, как и с непонятым вложенным списком. Единственное отличие состоит в том, чтобы написать два цикла и оператора IF в одной строке в рамках записи списка As you can see, we are doing exactly the same thing as with un-nested list comprehension. The only difference is to write the two for loops and the if statement in a single line within the list notation []

Можете ли вы использовать «else» утверждение в понимании списка Python?

Да, вы можете использовать оператор else в списке. Но только в выражении, а не в контексте части понимания списка, предполагая [Выражение + контекст] Отказ

lst = [x if x%2==0 else x-1 for x in range(10)]
# [0, 0, 2, 2, 4, 4, 6, 6, 8, 8]

Чтобы выделить выражение и контекстные части, давайте будем использовать скобки вокруг выражения:

lst = [(x if x%2==0 else x-1) for x in range(10)]
# [0, 0, 2, 2, 4, 4, 6, 6, 8, 8]

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

# WRONG (INVALID SYNTAX)
lst = [x for x in range(10) if x%2==0 else x-1]
print(lst)

Почему это не удается? Причина – это неуместное заявление. Без окончания оператора код выполняется правильно. Я не могу не подумать о каком-либо убедительном аргументе, поддерживающем это решение о проектировании не позволяющим не допустить ветви в рамках контекста.

Но так как есть простая работа – вокруг (перемещение его в часть выражения, как показано выше), вам не будет слишком сложно избежать этой ситуации.

Список VS Установка понимания в Python – Какая разница?

Существует две различия между пониманием списка и заданным пониманием.

  • Брекеты – скобки : Вы хотите создать набор? Используйте фигурные брекеты {}. Вы хотите создать список? Используйте угловые скобки [].
  • Тип данных результата : Понимание списка генерирует список и установленное понимание генерирует набор. The data type of the result : list comprehension generates a list and set comprehension generates a set. Read the ultimate guide on Python sets here (with Harry Potter examples )

Но синтаксически, список пониманий и заданное понимание идентичны.

Короткое и пот Учебник Instagram

Ein Beitrag Geteilt Von Python Blog (@ finxter.com_) Я

Ein Beitrag Geteilt Von Python Blog (@ finxter.com_) Я

Ein Beitrag Geteilt Von Python Blog (@ finxter.com_) Я

Ein Beitrag Geteilt Von Python Blog (@ finxter.com_) Я

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники To help students reach higher levels of Python success, he founded the programming education website Finxter.com . He’s author of the popular programming book Python One-Liners (NoStarch 2020), coauthor of the Coffee Break Python series of self-published books, computer science enthusiast, freelancer

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