Comment trouver toutes les combinaisons possibles depuis une liste d'éléments en python ?

Exemples de comment trouver toutes les combinaisons possibles depuis une liste d'éléments en python:

Créer une liste

Soit la liste suivante

L = ['a','b','c','d']

de taille len(L) = 4

Trouver les combinaisons de taille 2

Pour trouver tout d'abord les toutes les combinaisons de taille 2, une solution est d'utiliser le module python itertools:

from itertools import combinations

for i in combinations(L,2):
    print(i)

donne

('a', 'b')
('a', 'c')
('a', 'd')
('b', 'c')
('b', 'd')
('c', 'd')

On peut alors stocker les combinaisons dans une liste:

c2 = [i for i in combinations(L,2)]

print(c2)

donne

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

Trouver les combinaisons de taille 3

Autre exemple de comment trouver toutes les combinaisons de taille 3

c3 = [i for i in combinations(L,3)]

print(c3)

donne

[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')]

Trouver toutes les combinaisons possibles

On peut alors trouver toutes les combinaisons possibles comme ceci:

comb = []
for n in range(0,len(L)+1):
    comb.append([i for i in combinations(L,n)])

comb

qui donne

[[()],
 [('a',), ('b',), ('c',), ('d',)],
 [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')],
 [('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')],
 [('a', 'b', 'c', 'd')]]

Trouver les combinaisons avec remplacement

Pour trouver les combinaisons avec remplacement on peut utiliser la fonction combinations_with_replacement. Exemple des combinaisons de taille 2 avec remplacement

from itertools import combinations_with_replacement

for i in combinations_with_replacement(L,2):
    print(i)

donne

('a', 'a')
('a', 'b')
('a', 'c')
('a', 'd')
('b', 'b')
('b', 'c')
('b', 'd')
('c', 'c')
('c', 'd')
('d', 'd')

Références