Вложенный список пометки -Что это даже значит?
Есть три одинаково интерпретации этого срока:
- Приходя с компьютерной науки, я предполагал, что «понимание вложенного списка» относится к созданию списка списков. Другими словами: Как создать вложенный список с пониманием списка?
- Но после немного исследований я узнал, что есть вторая интерпретация вложенного списка понимания: Как использовать вложенное для петли в списке понимание?
- Через несколько месяцев я понял, что некоторые люди используют «понимание вложенного списка», чтобы означать использование оператора понимания списка как выражение в заявлении о понимании списка. Другими словами: Как использовать оператор понимания списка в утверждении понимания списка? (Посмотрите видео, чтобы узнать об этой третьей интерпретации.)
Как создать вложенный список с пониманием списка?
Можно создать вложенный список с пониманием списка в 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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.