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

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

Многие кодировщики борются с пониманием функции ZIP. Давайте исправить это! Функция ZIP () принимает произвольное количество повторных в систему и агрегирует их до одного илетного объекта ZIP. Он сочетает в себе i-й ценности каждого намека на кортеж в кортеж. Следовательно, если вы пройдете два поступления, каждый кортеж будет содержать два значения. Если … Python Zip – полезное иллюстрированное руководство Подробнее »

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

Многие кодеры борется с пониманием ZIP функция Отказ Давайте исправить это!

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

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

Как zip два списка в Python?

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

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

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

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

Как расстегивать застенчивый список в Python?

Начнем с этого закручивания списка:

 [(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 () Функция принимает ряд поручений и агрегирует их в один, объединяя I-Th значений каждого потенциала в кортеж. Вы можете unzip Этот список кортежей, позвонив zip (* список) Использование распаковки ( Asterisk ) Оператор * Отказ

Остальная часть этой статьи о ответе на ваши вопросы относительно zip () функция.

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

Он просто игнорирует оставшиеся элементы более широкого списка. Вот пример:

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 является объектом, который содержит фиксированное количество Элементы, И позволяет получить доступ к каждому элементу в упорядоченной моде (The Next (iTerator) Функция для итератора). Это более эффективно и более общего назначения – по сравнению с созданием списка и возврата списка в результате.

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

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

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

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. Я называю это «Coffe Break Python Email Course», потому что он улучшит ваши навыки Python в вашем перерыве на кофе. Вам просто нужно прочитать мои ежедневные электронные письма и участвовать в забавных проблемах кодирования. Мои> 5000 читателей любят это.

Прийти и присоединиться к нам!

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

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

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