A veces, podríamos querer conocer los índices de las listas combinadas con zip. En ese caso, podemos usar enumerate() encima de zip(). Sin embargo, es esencial entender lo que hace cada una de estas funciones. Zip devuelve una tupla por cada par de elementos de las listas. Enumerate devuelve una tupla por cada elemento de una lista. Por lo tanto, la estructura resultante será una tupla de tuplas:
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))]
# Por lo tanto, necesitamos iterar sobre los elementos con tuplas:
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
Observa cómo item1 y item2 están agrupados para formar una tupla en el bucle for.
Desafío
Dadas 3 listas, cada una en una línea separada, se te pide crear una nueva lista a partir de ellas que represente la suma de los elementos de las 3 listas, omitiendo los valores en las posiciones impares (la indexación comienza en 0).
La entrada contiene 3 líneas - cada una contiene números separados por un espacio.
El programa debe imprimir una sola línea - la lista resultante.