Источник: мой блог (лучше форматирование)
пример
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
вход
Ноль или более итераций [1] (например, список, строка, кортеж, словарь)
Выход (список)
1-й кортеж = (элемент_1 из цифр, элемент_1 из букв)
2-й кортеж = (e_2 цифры, e_2 буквы)
...
n-й кортеж = (цифры e_n, буквы e_n)
- Список из n кортежей: n - длина самого короткого аргумента (входная)
- len (цифры) == 3 <len (буквы) == 4 → короткий = 3 → вернуть 3 кортежа
- Длина каждого кортежа = количество аргументов (кортеж берет элемент из каждого аргумента)
- args = (цифры, буквы); len (args) == 2 → кортеж с 2 элементами
ith кортеж = (element_i arg1, element_i arg2…, element_i arg n)
Краевые Чехлы
1) Пустая строка: len (str) = 0 = нет кортежей
2) Одна строка: len (str) == 2 кортежа с len (args) == 1 элемент (ов)
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Почтовый индекс в действии!
1. Создайте словарь [2] из двух списков
keys = ["drink","band","food"]
values = ["La Croix", "Daft Punk", "Sushi"]
my_favorite = dict( zip(keys, values) )
my_favorite["drink"]
# 'La Croix'
my_faves = dict()
for i in range(len(keys)):
my_faves[keys[i]] = values[i]
zip это элегантное, четкое и краткое решение
2. Печать столбцов в таблице
«*» [3] называется «распаковка»: f(*[arg1,arg2,arg3]) == f(arg1, arg2, arg3)
student_grades = [
[ 'Morty' , 1 , "B" ],
[ 'Rick' , 4 , "A" ],
[ 'Jerry' , 3 , "M" ],
[ 'Kramer' , 0 , "F" ],
]
row_1 = student_grades[0]
print row_1
# ['Morty', 1, 'B']
columns = zip(*student_grades)
names = columns[0]
print names
# ('Morty', 'Rick', 'Jerry', 'Kramer')
Дополнительный кредит: распаковка
zip(*args) называется «расстегивание молнии», потому что он имеет обратный эффект zip
numbers = (1,2,3)
letters = ('a','b','c')
zipped = zip(numbers, letters)
print zipped
# [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*zipped)
print unzipped
# [(1, 2, 3), ('a', 'b', 'c')]
unzipped: tuple_1 = e1 каждого сжатого кортежа. tuple_2 = e2 каждогоzipped
Сноски
- Объект, способный возвращать своих членов по одному (например, список [1,2,3], строка «I like codin», tuple (1,2,3), словарь {'a': 1, 'b') : 2})
- {ключ1: значение1, ключ2: значение2 ...}
- «Распаковка» (*)
* Код:
# foo - function, returns sum of two arguments
def foo(x,y):
return x + y
print foo(3,4)
# 7
numbers = [1,2]
print foo(numbers)
# TypeError: foo() takes exactly 2 arguments (1 given)
print foo(*numbers)
# 3
*взял numbers(1 arg) и «распаковал» его '2 элемента в 2 args
zipсделать? Почему у вас должно быть три списка - как они будут выглядеть?