Accueil

Orientation générale

Barre de recherche

DicoNombre

DicoMot Math

DicoCulture

Atlas des maths

Rubriques

Index alphabétique

Nouveautés

Actualités

Références

Édition du: 29/07/2025

M'écrire

Brèves de Maths

 

INDEX

 

Python

 

Programmation

Informatique

Multimédia

Ordinateur

Python – Comment se lancer et initiation

INITIATION

BASES

MATHS

Nombres

Arithmétique

Combinatoire

Plus de chiffres

Th. des nombres

Avec des chiffres

Algèbre

Faites un double-clic pour un retour en haut de page

 

 

PYTHON: Trucs et astuces

Combinatoire

 

Quelles sont les principales choses à savoir ou à avoir sous la main lorsqu'on s'intéresse aux dénombrements, combinaisons, permutations, arrangements.

 

 

Sommaire de cette page

>>> Combinaisons

>>> Permutations

>>> Permutations et combinaisons – Comparaison

>>> Anagrammes numériques

>>> Exemple avec affichage d'une table

  

Débutants

Programmation

 

Glossaire

Informatique

Algorithme

 

 

Combinaisons

haut

Combinaisons de 3 parmi 4

 

Chaque combinaison (comb) est un tuple (1, 2, 4)

 

L'instruction avec join, assemble les éléments d’une séquence en les séparant par le texte entre parenthèses.

from itertools import combinations

 

A = [1, 2, 3, 4]

C = list(combinations(A, 3))

 

for comb in C:

    print("-".join(str(x)\

       for x in comb))

1-2-3

1-2-4

1-3-4

2-3-4

Toutes les combinaisons

 

Note: Voyez comment imprimer les objets sans l'apostrophe avec join

(conversion des éléments en une chaîne formatée).

from itertools import combinations

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

C = []

# Combinaisons de longueur 1 à 4

for r in range(1, len(L) + 1):

    CC = list(combinations(L, r))

    C.extend(CC)

# Affichage

for comb in C:

    print(",".join(comb))

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

 

Permutations

haut

Permutation

from itertools import permutations

P = permutations([1,2,3])

for i in list(P):

    print(i)

(1, 2, 3)

(1, 3, 2)

(2, 1, 3)

(2, 3, 1)

(3, 1, 2)

(3, 2, 1)

Sélection

 

Ici 2 parmi 3.

from itertools import permutations

P = permutations([1,2,3],2)

for i in list(P):

    print(i)

(1, 2)

(1, 3)

(2, 1)

(2, 3)

(3, 1)

(3, 2)

 

Permutations et combinaisons

Comparaison

haut

Permutation (L, k)

 

 

Combinaison (L, k)

 

Notez l'orthographe de combination en anglais.

 

 

from itertools import permutations,combinations

A = [1, 2, 5]

 

L = []

P = permutations(A)

L.extend(P)

print(len(L),L)

M = []

Q = combinations(A,3)

M.extend(Q)

print(len(M),M)

 

L = []

P = permutations(A,2)

L.extend(P)

print(len(L),L)

M = []

Q = combinations(A,2)

M.extend(Q)

print(len(M),M)

Permutation

Combinaison 3

Permutation 2

Combinaison 2

6 [(1, 2, 5), (1, 5, 2), (2, 1, 5), (2, 5, 1), (5, 1, 2), (5, 2, 1)]

1 [(1, 2, 5)]

6 [(1, 2), (1, 5), (2, 1), (2, 5), (5, 1), (5, 2)]

3 [(1, 2), (1, 5), (2, 5)]

Accès à une permutation ou une combinaison de rang k

 

 

Accès direct impossible !

Il faut calculer toute la liste.

 

Pourquoi ? Combinaison et permutation retournent des itérateurs, et non des listes indexables directement.

rom itertools import permutations, combinations

A = [1, 2, 3, 4]

 

P = list(permutations(A))

print("Permutation rang 2 :", P[2])

 

C = list(combinations(A, 3))

print("Combinaison rang 2 :", C[2])

Permutation rang 2 : (1, 3, 2, 4)

Combinaison rang 2 : (1, 3, 4)

Même chose sur une seule ligne

from itertools import permutations, combinations

A = [1, 2, 3, 4]

 

print(list(permutations(A))[2])

print(list(combinations(A,3))[2])

 

(1, 3, 2, 4)

(1, 3, 4)

 

Anagrammes numériques

haut

Anagrammes du nombre 1123 et liste des nombres premiers parmi eux

 

from itertools import permutations

from sympy import isprime

 

def ANA(n):

    chiffres = list(str(n))

    anagrammes = set()

 

    for k in range(1, len(chiffres)+1):

        for p in permutations(chiffres, k):

            anagrammes.add(int(''.join(p)))

    return sorted(anagrammes)

 

def PREM(n):

    return [x for x in ANA(n) if isprime(x)]

 

def main():

    n = 1123

    tous = ANA(n)

    premiers = PREM(n)

 

    print(f"Anagrammes de {n} ({len(tous)} au total) :")

    print(tous)

 

    print(f"Nombres premiers parmi eux \

               ({len(premiers)}) :")

    print(premiers)

 

if __name__ == "__main__":

    main()

 Anagrammes de 1123 (34 au total) :

[1, 2, 3, 11, 12, 13, 21, 23, 31, 32, 112, 113, 121, 123, 131, 132, 211, 213, 231, 311, 312, 321, 1123, 1132, 1213, 1231, 1312, 1321, 2113, 2131, 2311, 3112, 3121, 3211]

 

Nombres premiers parmi eux (18) :

[2, 3, 11, 13, 23, 31, 113, 131, 211, 311, 1123, 1213, 1231, 1321, 2113, 2131, 2311, 3121]

 

Exemple avec affichage d'une table

haut

Toutes les permutations de quatre éléments

 

&

 

 

Affichage en table

Nécessite l'import de prettytable avec:

 

pip install prettytable

 

 

 

 

Remarque

Table pas facile à créer et à manipuler!

 

Je préfère importer les valeurs dans un traitement de texte et convertir en tableau sur place.

from itertools import permutations

from prettytable import PrettyTable

 

elements = ["A", "B", "C", "D"]

 

# Préparer les colonnes

table = PrettyTable()

table.field_names = ["1 élément", "2 éléments", "3 éléments", "4 éléments"]

 

# Trouver le nombre max de permutations

max_len = max(len(list(permutations(elements, r))) for r in range(1, 5))

 

# Remplir les colonnes avec les permutations

rows = []

for i in range(max_len):

    row = []

    for r in range(1, 5):

        perms = list(permutations(elements, r))

        if i < len(perms):

            row.append(", ".join(perms[i]))

        else:

            row.append("")  # case vide si pas assez de permutations

    rows.append(row)

 

# Ajouter les lignes au tableau

for row in rows:

    table.add_row(row)

 

print(table)

Voir Affichage en Python

 

 

 

Haut de page (ou double-clic)

 

 

 

Retour

*      Trucs de base en Python

*      Python – Ce qu'il faut absolument comprendre avant de se lancer

*      Les classiques en Python

Suite

*      Trucs avec les listes et les ensembles

*      Tour d'horizon avec l'exemple des palindromes

*      Les classiques – Factorielle, Fibonacci …

*      Comment obtenir plus de chiffres significatifs

*      Mes premiers dessins

Voir

*      Scratch – Apprendre à programmer simplement

*      Maple – Apprendre à programmer (maths)

*      Historique de l’aventure informatique

Sites

*      Cours Python – OpenClassrooms 

*      Programmation Python – WikiBooks

Cette page

http://villemin.gerard.free.fr/aInforma/PYTHON/Combinat.htm