====== Soluzioni del compito del 7/3/2008 ======
Ecco una soluzione semplice del secondo esercizio:
def dup(l):
l2=[]
for i in l :
l2.append(i)
l2.append(i)
return l2
Ci sono altri modi per esprimere lo stesso concetto, ad esempio:
def dup(l):
return reduce(lambda x,y : x+y, [ [i]*2 for i in l ])
Questa seconda soluzione impiega una //comprehension// per generare, ad esempio, da ''[ 1, 2, 'c' ]'' la lista ''[ [1, 1] , [2,, 2], ['c', 'c'] ]'' che contiene la lista delle copie degli elementi. La funzione //reduce// applica sequenzialmente l'operazione di concatenazione agli elementi della lista prodotta, portando al risultato voluto.
Notate che in questa soluzione, il ciclo viene sostituito da tipiche operazioni della programmazione funzionale.
Ecco una terza possibile soluzione:
def dup(l):
if len(l)==0 : return []
else : return [l[0]]*2 + dup(l[1:])
Questa soluzione rimpiazza invece il ciclo con una ricorsione.
Naturalmente, si puo' scegliere un modo diverso di realizzare la ricorsione, ad esempio con una tecnica //divide et impera//:
def dup(l):
if len(l)>1 :
return dup(l[:len(l)/2])+dup(l[len(l)/2:])
else : return l*2