class ListaElem: def __init__(self, val, succ=None): self.val = val self.succ = succ def __str__(self): return '[{}]->{}'.format(self.val, self.succ) def __repr__(self): return self.__str__() def __len__(self): '''if self.succ: return 1+self.succ.__len__() return 1 ''' l=self c=1 while l.succ: l=l.succ c+=1 return c def __add__(self, other): reslist=ListaElem(self.val) prev=reslist l=self.succ while l: ne=ListaElem(l.val) prev.succ=ne prev=ne l=l.succ l=other while l: ne=ListaElem(l.val) prev.succ=ne prev=ne l=l.succ return reslist def get(self, posiz): '''if not posiz: return self.val elif self.succ: return self.succ.get(posiz-1) else: raise IndexError''' l=self while posiz > 0 and l.succ: posiz-=1 l=l.succ if posiz==0: return l.val raise IndexError def cerca(self, x): '''if self.val == x: return True elif self.succ: return self.succ.cerca(x) else: return False''' l=self while l: if l.val==x: return True l=l.succ return False def gen_lista(lista): if not lista: return None return ListaElem(lista[0], gen_lista(lista[1:])) def gen_lista_iter(lista): reslist=ListaElem(lista[0]) l=reslist for i in lista[1:]: ne=ListaElem(i) l.succ=ne l=ne return reslist def gen_lista_iter2(lista): l=None for i in reversed(lista): l=ListaElem(i, l) return l l1=ListaElem(2, ListaElem(4, ListaElem(9))) print(l1) l=gen_lista([5,7,3,2,8,1,6]) print (l) # stampa [5]->[7]->[3]->[2]->[8]->[1]->[6]->None l=gen_lista_iter([5,7,3,2,8,1,6]) print (l) # stampa [5]->[7]->[3]->[2]->[8]->[1]->[6]->None l=gen_lista_iter2([5,7,3,2,8,1,6]) print (l) # stampa [5]->[7]->[3]->[2]->[8]->[1]->[6]->None print(len(l))