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

Zip & Unzip: Как это работает в Python?

https://youtu.be/7zx603xCri4 Функция zip () принимает ряд поручений и агрегирует их в один, объединяя I-Th значений каждого повторного кортежа в кортеж. Например, Zip вместе списки [1, 2, 3] и [4, 5, 6] до [(1,4), (2,5), (3,6)]. Вы можете расстегнуть этот список кортежей, вызова ZIP (* Список), используя … Zip & Unzip: Как это работает в Python? Подробнее “

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

Функция ZIP () принимает ряд показывать и агрегирует их одному, объединив i- господство Значения каждого потенциала в кортеж. Например, Zip вместе списки [1, 2, 3] и [4, 5, 6] до [(1,4), (2,5), (3,6)]. Вы можете расстегнуть этот список кортежей, вызова ZIP (* Список списка), используя оператора распаковки (Asterisk) *.

Итализатор является объектом, который содержит элементы, над которыми вы можете итерации. Примеры являются спискими, множествами или кортежами.

Раньше я вам медленно объясню, попробуйте код в нашей интерактивной оболочке:

Объяснение

Скажем, у вас есть два списка:

[1,2,3]
[4,5,6]

Теперь вы их вместе и получите новый список:

[(1,4), (2,5), (3,6)]

Вы можете unzip их, используя следующий трюк: Если вы удалите наружный кронштейн результата (например, через asterisk оператор ), вы получаете следующие три кортежа:

(1,4)
(2,5)
(3,6)

Когда вы нажимаете на молнии, вы получите новый список:

[(1,2,3), (4,5,6)]

Так что вы (почти) снова имеют два оригинальных списка!

Это идея в следующем фрагменте кода:

lst_1 = [1, 2, 3]
lst_2 = [4, 5, 6]

# Zip two lists together
zipped = list(zip(lst_1, lst_2))
print(zipped)
# [(1, 4), (2, 5), (3, 6)]


# Unzip to lists again
lst_1_new, lst_2_new = zip(*zipped)
print(list(lst_1_new))
print(list(lst_2_new))

Головоломка: какие Будет выпуск последних двух операторов печати?

Остальная часть статьи о ответе на любой вопрос, который вы можете относиться к zip () функция.

Как zip списков разных длин?

Просто сделай это. Python просто игнорирует оставшиеся элементы более длительного списка. Вот пример:

print(list(zip([1,2,3],[1,2])))
# [(1, 1), (2, 2)]

Можете ли вы использовать ZIP с одним аргументом?

Может быть, вы помните, что я сделал это несколько электронных писем назад, чтобы обмануть вас. Так: Да, вы можете сделать это. Python все еще создает кортеж из I-й Элементы – только то, что есть только один из них. Таким образом, кортеж имеет только один элемент. Вывод по умолчанию кортеж с одним элементом x представляет собой (x,).

print(list(zip([1,2,3])))
# [(1,), (2,), (3,)]

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

Я надеюсь, что вы сейчас понимаете, что это не ошибка в Python, но только кортеж с одним элементом. (Не спрашивайте меня, почему они не использовали формат «(X)» вместо «(x,)».)

Какой ZIP-объект в Python?

Вы быстро понимаете, что результат функции ZIP не является ни списком, ни кортежным:

x = [[1,2],[3,4]]
print(zip(*x))

Вы ожидаете [(1,3), (2,4)], но результат является «». Это странно, не так ли?

Вообще-то нет. Результат функции ZIP () является итератор. Итератор в Python является объектом, который содержит фиксированное количество элементов и позволяет получить доступ к каждому элементу в упорядоченной форме (следующий (итератор) функции для итератора). Это более эффективно и более общего назначения – по сравнению с созданием списка и возврата списка в результате.

Чтобы исправить это, вы должны преобразовать объект iTerator в хотите, чтобы вы хотите (например, Set, список, кортеж):

x = [[1,2],[3,4]]
print(list(zip(*x)))
# [(1, 3), (2, 4)]

Наконец, позвольте мне уточнить последнюю вещь: Оператор Звездочки размещен непосредственно перед распаковкой, который не будет распакован (не после него или где-либо еще). Если вы поместите Asterisk оператор где-нибудь еще, Python подумает, что это умножение и бросить ошибку (лучший случай)

x = [[1,2],[3,4]]
y = zip*(x)
# NO!

y = zip(x*)
# NO!

y = *zip(x)
# No! (It's an iterator not an iterable)

y = zip(*x)
# Yes!

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

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

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

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

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

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

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

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

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

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

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

Оригинал: “https://blog.finxter.com/zip-unzip-python/”