Essere flammato con tanto di Caps Lock ed avatar dell'NSA, evidente simbolo di autorità, è inquietante, per cui proviamo a chiarire un po' di concetti.
Il codice postato qui sotto è semplicemente inaccettabile per svariati motivi, il più banale è quello che Andrea ha sottolineato: che succede se le liste da sommare sono più di 2?
L'approccio ad un problema, matematico/informatico che sia, deve essere il più generico possibile: si cerca di risolvere il problema per n casi, non certo per 2 o 3, appunto generalizzare.
Per cui è evidente che l'approccio utilizzato non va bene.
AlessiaMaz ha scritto:
Andrea la ringrazio per la risposta. Ho provato e, dopo vari tentativi, ho scritto questo:
def listaRisultante():
lista2 = []
somma = 0
for lista_interna1 in lista:
for n in lista_interna1:
somma1= somma + n
for lista_interna2 in lista:
for m in lista_interna2:
somma2 = somma + m
lista2 = somma1, somma2
print(lista2)
lista = [[1,2,3],[5,6]]
lista_interna1 = [1,2,3]
lista_interna2 = [5,6]
listaRisultante()
Solo che mi stampa (6,6) invece di [6,11]
So di essere un disastro, ma non capisco dove sbaglio. Grazie comunque per la disponibilità.
PS Il problema sorge per più liste all'interno di una principale, li proprio non so cosa fare
Inoltre l'esercizio, se ricopiato correttamente e diamo per buono che sia così, richiede che la funzione creata restituisca una sequenza, il che si traduce con un return che non è presente.
Per cui, fatte le dovute premesse procediamo ad analizzare il problema:
L = [[1,2,3],[5,6]]
L'oggetto L è quello che in gergo viene chiamato "lista di liste". Essendo un iterabile è possibile accedere al singolo elemento con un ciclo for.
È utile osservare che in Python un idioma del tipo:
for i in iterable:
do_something()
va interpretato come "per ogni elemento i dell'oggetto iterable fai qualcosa".
Per cui tornando al nostro problema dobbiamo semplicemente eseguire la somma di ogni elemento di L, quindi di una lista.
Nulla di più semplice:
def somma(l):
tot = 0
for i in l:
tot += i
return tot
Semplicemente la funziona somma prende come parametro una lista l, tot è una variabile di tipo intero inizializzata a zero ed il ciclo for semplicemente scorre lungo ogni elemento della lista l.
Ora che abbiamo una funzione somma che funziona per una lista singola dobbiamo estendere il concetto ad una lista di liste:
def lista_ris(l):
final_list = [somma(single_list) for single_list in l]
return final_list
Quel costrutto tra parentesi quadre è chiamato "list comprehension" e semplicemente permette di creare una lista a partire da altre liste.
Il contenuto di esso è lapalissiano: semplicemente significa "per ogni singola lista in l esegui la somma e salvala in final_list".
A questo punto invocare la funziona lista_ris() all'interno della funzione print per stampare la lista desiderata.
Nel caso del prodotto è sufficiente scrivere una funzione adeguata che funzione come quella scritta in questo post per la somma e che lasceremo come esercizio per l'OP.
#!/usr/bin/python3
def somma(l):
tot = 0
for i in l:
tot += i
return tot
def lista_ris(l):
final_list = [somma(single_list) for single_list in l]
return final_list
L = [[1,2,3],[5,6]]
print(lista_ris(L))