Краткий ответ : По умолчанию, zip ()
Функция Возвращает zip-объект кортежей. Получить Список списков В качестве вывода используйте оператор понимания списка [Список (X) для X в ZIP (L1, L2)]
Это преобразует каждый кортеж в список и сохраняет преобразованные списки в новом объекте вложенного списка.
Промежуточные кодеры Python знают zip () функция. Но если вы похожи на меня, вы часто проклинали вывод функции ZIP: прежде всего, это zip-объект (а не список), а вторым, отдельные элементы на молнии. Но что, если вам нужен список списков как вывод? Эта статья покажет вам самый питонический способ сделать это.
Проблема : Учитывая ряд списков L1, L2, ...
Отказ Как Zip i-й элементы этих списков вместе и получить список списков ?
Пример : Учитывая два списка [1, 2, 3, 4]
и [«Алиса», «Боб», «Энн», «Лиз»]
И вы хотите список списков [[1, «Алиса»], [2, «Боб»], [3, «Энн»], [4, «Лиз»]]
Отказ
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # ... calculate result ... # Output: [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Вот быстрый обзор наших решений:
Упражнение : Создайте новый список L3. и изменить четыре метода на молния вместе все три списки (вместо всего два).
Метод 1: выражение генератора
Первый метод использует выражение генератора и преобразует в результате результирующегося в список, используя Список ()
конструктор.
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # Method 1 zipped = list(list(x) for x in zip(l1, l2)) print(zipped) # [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Это эффективно, но не самый краткий способ выполнения этой задачи.
Метод 2: Понимание списка
Лучший способ – использовать понимание списка, которое похоже на выражение генератора, но он создает список непосредственно без необходимости преобразовать переноса в список (как в методе 1).
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # Method 2: zipped = [list(x) for x in zip(l1, l2)] print(zipped) # [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Способ 3: для цикла и молнии
Кодераторы, которые не любят выражения понимания списка и выражения генератора (или, которые не понимают эти красивые функции Python), часто используют простой для петли Отказ В корпусе петлей вы преобразуете каждый кортеж в Zip объект в список и Добавить Этот список в вложенный список Zains
Отказ
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # Method 3: zipped = [] for t in zip(l1, l2): zipped.append(list(t)) print(zipped) # [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Этот метод читается, но менее краткий.
Метод 4: для петли и индексации
Этот метод часто используется кодерами, которые не знают ни zip ()
Способ, ни списка понимание, ни выражения генератора: цикла по всем показателям и добавление нового списка, полученного путем группировки I-TH-TH-элементов в список.
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # Method 4: zipped = [] for i in range(len(l1)): zipped.append([l1[i], l2[i]]) print(zipped) # [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Однако этот метод является наименьшим количеством питоновых, длительных, и он работает только для в одинаково размещенных списках.
Упражнение : Что произойдет, если первый список имеет больше элементов, чем второй список?
Метод 5: ZIP () + MAP () + Список ()
Функциональный способ решения этой проблемы является карта () Функция, которая применяет функцию к каждому элементу счетчика и возвращает объект карты. Вы можете пройти Список ()
Конструктор к карта ()
Функция для преобразования каждого кортежа в объекте ZIP в список. Затем вы можете преобразовать объект карты в список.
l1 = [1, 2, 3, 4] l2 = ['Alice', 'Bob', 'Ann', 'Liz'] # Method 5 print(list(map(list,zip(l1, l2)))) # [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]
Я не рекомендую этот метод, потому что функциональное программирование может быть трудно понять для многих кодеров для начинающих. Гвидо Ван Россум, создатель Python, не понравился функциональное программирование.
Обсуждение
Самый пифитонический способ создать список списков by Zipping Modern Несколько списков – это оператор понимания списка [Список (X) для X в ZIP (L1, L2)]
Отказ Понимание списка является быстрым, эффективным, лаконичным и читаемым. Вы также можете продлить его в общее дело, добавив больше списков в функцию ZIP: [Список (x) для x в zip (l1, l2, l3, ..., ln)]
Отказ zip ()
Функция также устойчивая к спискам разных длин. В этом случае элементы до максимального индекса кратчайшего списка назаливаются.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.