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
teaching/info3/soluzioni_del_compito_del_7_3_2008.txt · Last modified: 2008/03/12 10:46 by agosta
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki