Quelle: Mein Blog-Beitrag (bessere Formatierung)
Beispiel
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
Eingang
Null oder mehr Iterables [1] (z. B. Liste, Zeichenfolge, Tupel, Wörterbuch)
Ausgabe (Liste)
1. Tupel = (Element_1 der Zahlen, Element_1 der Buchstaben)
2. Tupel = (e_2 Zahlen, e_2 Buchstaben)
…
n-tes Tupel = (e_n Zahlen, e_n Buchstaben)
- Liste von n Tupeln: n ist die Länge des kürzesten Arguments (Eingabe)
- len (Zahlen) == 3 <len (Buchstaben) == 4 → short = 3 → 3 Tupel zurückgeben
- Länge jedes Tupels = Anzahl der Argumente (Tupel nimmt ein Element von jedem Argument)
- args = (Zahlen, Buchstaben); len (args) == 2 → Tupel mit 2 Elementen
ith tuple = (element_i arg1, element_i arg2…, element_i arg n)
Randfälle
1) Leere Zeichenfolge: len (str) = 0 = keine Tupel
2) Einzelne Zeichenfolge: len (str) == 2 Tupel mit len (args) == 1 Element (e)
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Zip in Aktion!
1. Erstellen Sie ein Wörterbuch [2] aus zwei Listen
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 ist eine elegante, klare und prägnante Lösung
2. Drucken Sie Spalten in einer Tabelle
"*" [3] heißt "Auspacken": 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')
Extra Credit: Entpacken
zip(*args) wird als "Entpacken" bezeichnet, da es den umgekehrten Effekt von hat 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 jedes gezippten Tupels. tuple_2 = e2 von jedemzipped
Fußnoten
- Ein Objekt, das seine Mitglieder einzeln zurückgeben kann (z. B. Liste [1,2,3], Zeichenfolge 'Ich mag Codin', Tupel (1,2,3), Wörterbuch {'a': 1, 'b'). : 2})
- {Schlüssel1: Wert1, Schlüssel2: Wert2 ...}
- "Auspacken" (*)
* Code:
# 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
*nahm numbers(1 arg) und "entpackte" seine '2 Elemente in 2 args
zipzu tun? Warum sollten Sie drei Listen haben - wie würden sie aussehen?