Джерело: Моя публікація в блозі (краще форматування)
Приклад
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 tuple = (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',)]
Zip в дії!
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], рядок 'Мені подобається кодін', кортеж (1,2,3), словник {'a': 1, 'b' : 2})
- {key1: value1, key2: value2 ...}
- "Розпакування" (*)
* Код:
# 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 арг) і "розпакував" свої 2 елементи на 2 аргументи
zipзробити? Навіщо тобі три списки - як вони виглядатимуть?