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

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

Вложенный список понимания — Что это значит даже? Существует три одинаково интерпретация этого срока: приход с компьютерного науки, я предполагал, что «понимание вложенного списка» относится к созданию списка списков. Другими словами: как создать вложенный список со списком пониманием? Но после немного исследований я … Как работает вложенном списком понять работу в Python? Прочитайте больше “

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

Вложенный список пометки -Что это даже значит?

Есть три одинаково интерпретации этого срока:

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

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

Можно создать вложенный список с пониманием списка в 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 целых чисел. Контекстная часть повторяет это три раза. Следовательно, каждый из трех вложенных списков имеет пять элементов.

Если вы продвинутый программист, вы можете спросить, есть ли здесь некоторое псевдонирование. Псевдонимы в этом контексте означает, что три элемента списка указывают на тот же список [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 в одной строке в рамках записи списка [] Отказ

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

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

## Data
text = '''
Call me Ishmael. Some years ago - never mind how long precisely - having
little or no money in my purse, and nothing particular to interest me
on shore, I thought I would sail about a little and see the watery part
of the world. It is a way I have of driving off the spleen, and regulating
the circulation. - Moby Dick'''

words = [[x for x in line.split() if len(x)>3] for line in text.split('\n')]

print(words)

Это утверждение вложенного списка. Это создает новый внутренний список как элемент внешнего списка. Каждый внутренний список содержит все слова с более чем 4 символами. Каждый внешний список содержит внутренний список для каждой строки текста.

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

Хотите увеличить навык Python ежедневно? Просто следуя серии бесплатных электронных питовых питонов? Затем присоединитесь к Академии по электронной почте # 1 Python в мире!

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

(Кроме того – это бесплатно, и вы можете отписаться в любое время, чтобы вам нечего терять и все, чтобы получить.)

Присоединяйтесь к Академии # 1 Python Email в мире!

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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