Perché il mio codice Python non funziona? Errore strano con le liste

👤 Iniziato da @mercurioserra29
📅 29/05/2025 20:00
📁 Programmazione 🌐 IT
Avatar di mercurioserra29
Ciao a tutti, sono alle prime armi con Python e sto cercando di lavorare con le liste. Ho scritto questo codice semplice per sommare gli elementi di due liste, ma mi dà un errore che proprio non capisco:

```python
lista1 = [1, 2, 3]
lista2 = [4, 5, 6]
somma = lista1 + lista2
print("La somma è:", somma)
```

Mi aspettavo che mi desse la somma elemento per elemento [5, 7, 9], invece mi concatena le due liste [1, 2, 3, 4, 5, 6]. Cosa sto sbagliando? Qualcuno può spiegarmi come ottenere il risultato che voglio? Ho cercato online ma non trovo una soluzione chiara. Grazie in anticipo per l'aiuto!
Avatar di desirèe.martini457
Ciao @mercurioserra29, ti capisco, all’inizio Python può giocare brutti scherzi con le liste! Quando usi l’operatore `+` tra due liste, Python non somma elemento per elemento, ma le concatena, cioè le mette una dietro l’altra. Per ottenere la somma elemento per elemento devi fare un’operazione diversa. Il più semplice è usare una *list comprehension* così:

```python
somma = [a + b for a, b in zip(lista1, lista2)]
print("La somma è:", somma)
```

`zip(lista1, lista2)` accoppia gli elementi delle due liste e poi la list comprehension li somma uno a uno. Se invece hai bisogno di lavorare con operazioni matematiche più complesse o con liste di numeri più grosse, ti consiglio di dare un’occhiata a NumPy, una libreria che gestisce array e operazioni vettoriali in modo super efficiente. Ma per iniziare, questa soluzione è perfetta. Non scoraggiarti, ci vuole solo un po’ di pratica! Se vuoi posso aiutarti a capire meglio anche come funzionano gli altri metodi. :)
Avatar di marinagatti
Ciao @mercurioserra29, capisco la frustrazione! L'errore è comune: in Python l'operatore `+` sulle liste fa la concatenazione, non la somma elemento per elemento. @desirèe.martini457 ha dato la soluzione migliore con `zip` + list comprehension, ma se vuoi un'alternativa più esplicita (magari per chiarire la logica) prova così:

```python
somma = []
for i in range(len(lista1)):
somma.append(lista1[i] + lista2[i])
```

Oppure, se ti piace la sintassi compatta, puoi usare `map`:
```python
somma = list(map(lambda x, y: x + y, lista1, lista2))
```

**Attenzione però**: tutte queste soluzioni funzionano SOLO se le liste hanno **stessa lunghezza**! Se una è più corta, gli elementi extra vengono ignorati (con `zip`) o danno errore (con l'indice `[i]`). Per sicurezza, aggiungerei un controllo prima:
```python
if len(lista1) != len(lista2):
print("Le liste hanno dimensioni diverse!")
else:
# calcola la somma
```

Non arrenderti, all'inizio è normale inciampare in questi dettagli! 💪
Avatar di mercurioserra29
Ehi @marinagatti, grazie mille per la spiegazione dettagliata! Effettivamente mi ero incaponito sull'operatore `+` senza capire che faceva la concatenazione... Che paperata! 😅 Adesso ho provato con `zip` e funziona perfettamente. Grazie anche per il controllo sulla lunghezza delle liste, non ci avevo pensato e sarebbe stato un bel problema in produzione. Devo dire che tutti voi state facendo un lavoro fantastico a spiegarmi le cose, anche se all'inizio ero un po' scocciato per l'errore stupido. Scusate se sono permaloso, è più forte di me!

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!