Źródło: Mój post na blogu (lepsze formatowanie)
Przykład
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
Wejście
Zero lub więcej iterable [1] (np. Lista, ciąg znaków, krotka, słownik)
Wyjście (lista)
Pierwsza krotka = (element_1 liczb, element_1 liter)
Druga krotka = (e_2 cyfry, e_2 litery)
…
n-ta krotka = (e_n liczb, e_n liter)
- Lista n krotek: n to długość najkrótszego argumentu (dane wejściowe)
- len (liczby) == 3 <len (litery) == 4 → short = 3 → zwracają 3 krotki
- Długość każdej krotki = liczba argumentów (krotka pobiera element z każdego argumentu)
- args = (cyfry, litery); len (args) == 2 → krotka z 2 elementami
ith tuple = (element_i arg1, element_i arg2…, element_i arg n)
Przypadki krawędzi
1) Pusty ciąg: len (str) = 0 = brak krotek
2) Pojedynczy ciąg: len (str) == 2 krotki z len (args) == 1 element (y)
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Zip w akcji!
1. Zbuduj słownik [2] z dwóch list
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 to eleganckie, przejrzyste i zwięzłe rozwiązanie
2. Wydrukuj kolumny w tabeli
„*” [3] nazywa się „rozpakowywaniem”: 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')
Dodatkowy kredyt: rozpakowanie
zip(*args) nazywa się „rozpakowywaniem”, ponieważ ma odwrotny skutek 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 każdej spakowanej krotki. tuple_2 = e2 każdegozipped
Przypisy
- Obiekt zdolny do zwracania swoich członków pojedynczo (np. Lista [1, 2, 3], łańcuch „I like codin”, tuple (1, 2, 3), słownik {„a”: 1, „b” : 2})
- {klucz1: wartość1, klucz2: wartość2 ...}
- „Rozpakowanie” (*)
* Kod:
# 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
*wziął numbers(1 argument) i „rozpakował” jego '2 elementy na 2 argumenty
zipsię zrobić? Dlaczego miałbyś mieć trzy listy - jak by one wyglądały?