Às vezes, podemos querer saber os índices de listas zipadas. Nesse caso, podemos usar enumerate() em cima de zip(). Porém, é essencial entender o que cada uma dessas funções faz. zip() retorna uma tupla para cada par de elementos das listas. enumerate() retorna uma tupla para cada elemento de uma lista. Portanto, a estrutura resultante será uma 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))]
# Portanto, precisamos percorrer os elementos com tuplas:
for i, (item1, item2) in enumerate(zip(a, b)):
print(f'índice: {i} => a[i]={item1} e 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
Observe como item1 e item2 são agrupados para formar uma tupla no loop for.
Desafio
Dadas 3 listas, cada uma em uma linha separada, você deve criar uma nova lista a partir delas que representará a soma dos elementos das 3 listas, enquanto pula os valores em posições ímpares (a indexação começa em 0).
A entrada contém 3 linhas - cada uma contém números separados por um espaço.
O programa deve imprimir uma única linha - a lista resultante.