Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

sommare un elemento ad una tupla di più valori, IN'UNICA ISTRUZIONE

A
AmritV (830 points)
8 8 11
in Programmare in Python by (830 points)
recategorized by
Salve,

come da titolo, volevo sapere se è possibile sommare un elemento ad una tupla/lista di piu elementi ricorrendo ad un'unica istruzione e senza ricorrere a nessun ciclo o a funzioni esterne.

ES: lista=[2,2,2]   /elemento da sommare 1:

risultato=[3,3,3]
1.0k views
closed

3 Answers

Best answer
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
selected by
Se una comprehension list ti va bene:

lista = [x + daSommare for x in lista]

Se cerchi qualcosa che non iteri in qualche modo su tutti gli elementi, non vedo come possa funzionare. Non credo esista.
A
AmritV (830 points)
8 8 11
by (830 points)

Ti spiego, avrei una funzione ricorsiva che mi ritorna due elementi, quindi una tupla. 

Ed io vorrei aggiungere ad entrambe le parti un valore equo...

A
AmritV (830 points)
8 8 11
by (830 points)
Ovviamente quando la richiamo la funzione ricorsiva, qualcosa del genere:

1+chiamata funzione ricorsiva()
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
Quindi vuoi evitare di scrivere:

nuovaTupla = (risultato[0]+1, risultato[1]+1)? (ricordo che non puoi modificare una tupla)

Cioè, siccome sai che la tupla ha sempre 2 elementi puoi fare semplicemente così ma chiedi se c'è un modo ancora più breve, mi pare di capire. Non credo, mi spiace.
E
Edward (25950 points)
3 4 172
by (26.0k points)
Se gli elementi sono solo due puoi fare così

risultato = (1,) + risultato + (1,)

poi quando avrai finito...
parte1 =  sum(:risultato[len(risultato)//2])
parte2 = sum(risultato[len(risultato)//2:])

però non è molto efficiente, e sum comunque itera tra gli elementi ¯\_(ツ)_/¯
A
AmritV (830 points)
8 8 11
by (830 points)

Si esatto voglio evitare di scrivere: risultato[0]+1, risultato[1]: siccome se "risultato" è una funzione, mi andrebbe a generare due ricorsioni e non una!!!

Scusa se sono poco chiaro, ma non saprei come spiegarmi meglio.

grazie, nel frattempo ho avuto una piccola illuminazione!! : penso che basti inserire i due parametri come argomenti della funzione , cosi facendo posso gestirmeli più facilmente.

AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
Beh io per "risultato" intendevo il valore tornato dalla funzione, non la funzione
Comunque sì, non ti fare scrupoli col passaggio di parametri, che qua tutti passiamo un sacco di parametri per cercare di rendere il codice più efficiente ^^ (ad esempio lunghezze varie, per non calcolarle ogni volta)
E
Edward (25950 points)
3 4 172
by (26.0k points)
con numpy puoi fare così:

import numpy
lista = [1,2,3]
risultato = numpy.array(lista) + 1

Ed avrai un oggetto di tipo numpy.ndarray
Non so però com'è implementato, probabilmente fa comunque un for perchè gli elementi deve scorrerli in qualche modo :D
Lorenzo Cristini (10830 points)
0 0 27
by (10.8k points)
Non so se è quello che intendi, però puoi usare la map che prende come argomenti una funzione e un iterabile. Come funzione ci metti una lambda che somma 1 e come iterabile la tupla, ovviamente credo che lo faccia comunque con un ciclo, ma almeno lo fai in una riga