:PROPERTIES:
:ID:       acda43fa-70be-4939-9128-47114e48e4cb
:mtime:    20220528183525
:ctime:    20220527190024
:END:
#+title: Fonction zip

* Introduction
Fonction /built-in/ permettant l'itération de plusieurs /iterable/ à la fois :
 * Si les /iterable/ n'ont pas le même nombre d'éléments, /zip/ arrêtera une fois le plus court atteint.

* Howto
** /Iterable/ de tailles différentes
#+BEGIN_SRC python :results output
firsts = ["Anna", "Bob", "Charles", "Chris"]
middles = ["Z.", "A.", "G."]
lasts = ["Smith", "Doe", "Evans"]

for it in zip(firsts, middles, lasts):
    print(f'{type(it)=}')
    first, *others = it
    print(f"'{first} {others}'")
#+END_SRC
#+RESULTS:
: type(it)=<class 'tuple'>
: 'Anna ['Z.', 'Smith']'
: type(it)=<class 'tuple'>
: 'Bob ['A.', 'Doe']'
: type(it)=<class 'tuple'>
: 'Charles ['G.', 'Evans']'

#+BEGIN_SRC python :results output
firsts = ["Anna", "Bob", "Charles", "Chris"]
middles = ["Z.", "A.", "G."]
lasts = ["Smith", "Doe", "Evans"]

for first, middle, last in zip(firsts, middles, lasts):
    print(f"'{first} {middle} {last}'")
#+END_SRC
#+RESULTS:
: 'Anna Z. Smith'
: 'Bob A. Doe'
: 'Charles G. Evans'

** Création d'un /dict/ avec /zip/
#+BEGIN_SRC python :results output
firsts = ["Anna", "Bob", "Charles"]
lasts = ["Smith", "Doe", "Evans"]
print(f'{dict(zip(firsts, lasts))=}')
#+END_SRC
#+RESULTS:
: dict(zip(firsts, lasts))={'Anna': 'Smith', 'Bob': 'Doe', 'Charles': 'Evans'}

* Références
 * [[https://mathspp.com/blog/pydonts/zip-up][Zip up - Pydon't]]
