1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def combinaisons_v2(p,e):
liste_combinaisons=[] # initialisation de la liste des combinaisons à générer
n=len(e) # dimension de l'ensemble
indices=list(range(p)) # initialisation de la liste avec les indices de départ [0,1,...,p-1]
liste_combinaisons.append(tuple([e[index] for index in indices])) # ajout de la combinaison à la liste
if p==n:
return liste_combinaisons
i = p-1 # on commence à incrémenter le dernier indice de la liste
while (i != -1): # tant qu'il reste encore des indices à incrémenter
indices[i] += 1 # on incrémente l'indice
for j in range(i + 1, p): # on recale les indices des éléments suivants par rapport à ndices[i]
indices[j] = indices[j - 1] + 1
if indices[i] == (n - p + i): # si cet indice a atteint sa valeur maxi
i = i - 1 # on repère l'indice précédent
else: # sinon
i = p - 1 # on repère le dernier indice
liste_combinaisons.append(tuple([e[index] for index in indices])) # ajout de la combinaison à la liste
return liste_combinaisons