A volte potremmo voler conoscere gli indici delle liste zip. In tal caso, possiamo usare enumerate() sopra zip(). Tuttavia, è essenziale capire cosa fa ciascuna di queste funzioni. Zip restituisce una tupla per ogni coppia di elementi delle liste. Enumerate restituisce una tupla per ogni elemento di una lista. Pertanto, la struttura risultante sarà una tupla di tuple:
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
zip(a, b) # [(1, 5), (2, 6), (3, 7), (4, 8)]
enumerate(a) # [(0, 1), (1, 2), (2, 3), (3, 4)]
enumerate(b) # [(0, 5), (1, 6), (2, 7), (3, 8)]
enumerate(zip(a, b)) # [(0, (1, 5)), (1, (2, 6)), (2, (3, 7)), (3, (4, 8))]
# Pertanto, dobbiamo iterare sugli elementi con tuple:
for i, (item1, item2) in enumerate(zip(a, b)):
print(f'index: {i} => a[i]={item1} and b[i]={item2}')
# index: 0 => a[i]=1 and b[i]=5
# index: 1 => a[i]=2 and b[i]=6
# index: 2 => a[i]=3 and b[i]=7
# index: 3 => a[i]=4 and b[i]=8
Notate come item1 e item2 sono raggruppati per formare una tupla nel ciclo for.
Sfida
Date 3 liste, ciascuna su una riga separata, vi viene chiesto di creare una nuova lista che rappresenti la somma degli elementi delle 3 liste, saltando però i valori nelle posizioni dispari (l'indicizzazione inizia da 0).
L'input contiene 3 righe - ciascuna contiene numeri separati da uno spazio.
Il programma deve stampare una singola riga - la lista risultante.