Esegui il bucle di più liste in Python

mo abdelazim 30 gennaio 2023
  1. Funzione zip() in Python 3.x
  2. Funzione zip() in Python 2.x
Esegui il bucle di più liste in Python

Questo tutorial spiega come scorrere due liste / tuple contemporaneamente in Python. Useremo zip() e itertools.zip_longest() e spiegheremo le differenze tra loro e come usarli. Vedremo anche come il tipo di ritorno zip() è diverso in Python 2 e 3.

Funzione zip() in Python 3.x

La funzione zip() accetta liste/tuple come argomenti e restituisce un oggetto zip, che è un iteratore di tuple.

Usa zip() per scorrere due liste

Passa entrambe le liste alla funzione zip() e usa il bucle for per scorrere l’iteratore dei risultati.

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
    print(a, b)

Produzione:

1 10
2 20
3 30
4 40

Usa zip() per scorrere due liste con lunghezze diverse

Se le liste hanno lunghezze differenti, zip() si ferma quando finisce la lista più corta. Vedi il codice qui sotto.

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
    print(a, b)

Produzione:

1 10
2 20
3 30
4 40

Usa itertools.zip_longest() per scorrere due liste

Se hai bisogno di scorrere due liste fino alla fine di quello più lungo, usa itertools.zip_longest(). Funziona esattamente come la funzione zip() tranne per il fatto che si ferma quando finisce l’lista più lungo.

Riempie i valori vuoti con None e restituisce un iteratore di tuple.

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB):
    print(a, b)

Produzione:

1 10
2 20
3 30
4 40
5 None
6 None

Il fillvalue predefinito è None, ma puoi impostare fillvalue su qualsiasi valore.

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB, fillvalue=0):
    print(a, b)

Produzione:

1 10
2 20
3 30
4 40
5 0
6 0

Usare zip() con liste multiple

zip() e le sue funzioni simili possono accettare più di due liste.

import itertools

codes = [101, 102, 103]
students = ["James", "Noah", "Olivia"]
grades = [65, 75, 80]

for a, b, c in itertools.zip_longest(codes, students, grades, fillvalue=0):
    print(a, b, c)

Produzione:

101 James 65
102 Noah 75
103 Olivia 80

Funzione zip() in Python 2.x

La funzione zip() in Python 2.x accetta anche liste/tuple multiple come argomenti ma restituisce una lista di tuple. Funziona bene per liste piccoli, ma se hai liste enormi, dovresti invece usare itertools.izip(), perché restituisce un iteratore di tuple.

Usa itertools.izip() per scorrere due liste

import itertools

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in itertools.izip(listA, listB):
    print(a, b)

Produzione:

1 10
2 20
3 30
4 40

Articolo correlato - Python List