Source: Mon article de blog (meilleur formatage)
Exemple
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
Contribution
Zéro ou plusieurs itérables [1] (ex. Liste, chaîne, tuple, dictionnaire)
Sortie (liste)
1er tuple = (élément_1 des nombres, élément_1 des lettres)
2ème tuple = (nombres e_2, lettres e_2)
…
n-ième tuple = (e_n nombres, e_n lettres)
- Liste de n tuples: n est la longueur de l'argument le plus court (entrée)
- len (nombres) == 3 <len (lettres) == 4 → court = 3 → retourne 3 tuples
- Length each tuple = # of args (tuple prend un élément de chaque arg)
- args = (nombres, lettres); len (args) == 2 → tuple avec 2 éléments
i
th tuple = (element_i arg1, element_i arg2…, element_i arg n
)
Cas de bord
1) Chaîne vide: len (str) = 0 = pas de tuples
2) Chaîne unique: len (str) == 2 tuples avec len (args) == 1 élément (s)
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Zip en action!
1. Construisez un dictionnaire [2] à partir de deux listes
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
est une solution élégante, claire et concise
2. Imprimer des colonnes dans un tableau
"*" [3] est appelé "déballage": 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')
Crédit supplémentaire: décompression
zip(*args)
est appelé «décompression» car il a pour effet inverse 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 de chaque tuple compressé. tuple_2 = e2 de chaquezipped
Notes de bas de page
- Un objet capable de renvoyer ses membres un par un (ex. List [1,2,3], string 'I like codin', tuple (1,2,3), dictionary {'a': 1, 'b' : 2})
- {clé1: valeur1, clé2: valeur2 ...}
- «Déballage» (*)
*
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
*
a pris numbers
(1 argument) et a «déballé» ses 2 éléments en 2 arguments
zip
faire exactement ? Pourquoi devriez-vous avoir trois listes - à quoi ressembleraient-elles?