Многие кодеры борется с пониманием ZIP функция Отказ Давайте исправить это!
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 все еще создает кортеж из
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)]
Наконец, позвольте мне уточнить последнюю вещь: Оператор Звездочки размещен непосредственно перед распаковкой, который не будет распакован (не после него или где-либо еще). Если вы поместите оператор звездочка где-нибудь еще, 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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.