"""disposizioni con ripetizione e disposizioni semplici, combinazioni Il Python trova la lista di queste e per sapere il numero basta chiedere la lunghezza della lista len""" def complementare(a,b): c=[] for x in b: if not x in a: c[0:0]=[x] return c def disposiz(L, N): """disposizioni degli elementi della lista L a gruppi di N""" if N==0: return [[]] else: LT=disposiz(L,N-1) LT1=LT[:] for D in LT1: for E in complementare(D,L): TS=D[:] TS.append(E) LT.append(TS) LT.remove(D) return LT def disposiz_r(L, N): """disposizioni con ripetizione degli elementi della lista L a gruppi di N""" if N==0: return [[]] else: LT=disposiz_r(L,N-1) LT1=LT[:] for D in LT1: for E in L: TS=D[:] TS.append(E) LT.append(TS) LT.remove(D) return LT def contenuto(A,B): """restituisce vero se A e' contenuto in B""" ff=True for j in A: if not(j in B): ff=False return ff def uguali(A,B): """restituisce vero se A e' uguale a B a parte l'ordine""" ff=False if contenuto(A,B) and contenuto(B,A): ff=True return ff def togli_uguali(L): """toglie le permutazioni lasciandone solo una""" T=L[:] for x in T: T.remove(x) T1=T[:] for j in T1: if uguali(x,j): T.remove(j) T.insert(0,x) return T def comb(L,N): """sfrutta le disposizioni semplici togliendo le permetuzioni""" K=disposiz(L,N) G=togli_uguali(K) return G f=comb(['a','b','c','d','e'],2) print f, len(f)