Bonjour,
Je tente d'établir la liste des combinaisons de 8 lettres sur la base de 4 lettres mais je ne parviens pas à la coder.
Ex: base: 'a b c d' liste =[ [a,a,a,b,b,b,c,c], [a,a,a,b,c,c,d,d] ...]
Auriez-vous une idée ?
5 you.
Bonjour,
Je tente d'établir la liste des combinaisons de 8 lettres sur la base de 4 lettres mais je ne parviens pas à la coder.
Ex: base: 'a b c d' liste =[ [a,a,a,b,b,b,c,c], [a,a,a,b,c,c,d,d] ...]
Auriez-vous une idée ?
5 you.
Bonjour,
https://docs.python.org/3/library/it...s.combinations ferait l'affaire ?
Bonjour,
Bizarre. D'habitude, le problème est: liste des combinaisons de 8 objets pris 4 à 4. Mais là, j'ai l'impression que c'est le contraire!
Si c'est vraiment le contraire, je suggère:
base = list("aaaaaaaabbbbbbbbccccccccdddddddd")
On peut alors utiliser la fonction combinations du module itertools:
liste = combinations(base, 8)
Et on trouve bien des éléments comme:
Il y en a tout de même 10.518.300!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ('a', 'a', 'a', 'b', 'b', 'b', 'b', 'd') ('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c') ('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c') ('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c')
Mais il y a bien sûr des redondances. A voir s'il faut les éliminer.
Bonsoir,
Ce ne serait pas une réponse comme celle ci-dessous qu'on souhaiterait ?
Dans ce cas je penserai plus à la méthode product du module itertools et dans ce cas il n'y aurait que 65536 cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part [['d', 'd', 'd', 'd', 'd', 'd', 'd', 'd'], ['d', 'd', 'd', 'd', 'd', 'd', 'd', 'c'], ['d', 'd', 'd', 'd', 'd', 'd', 'd', 'b'], ['d', 'd', 'd', 'd', 'd', 'd', 'd', 'a'], ['d', 'd', 'd', 'd', 'd', 'd', 'c', 'd'], ..., ...]
Merci pour vos réponses. Il y a du vrai partout.
Effectivement, on a le sentiment que l'on pense à l'envers car à l'accoutumée, on est plutôt dans le sens où parmi 8 éléments, combien de combinaisons de 4 .
Il serait agit alors d'une combinaison classique.
Mais les deux solutions me conviennent sauf que bien entendu j'envisageais d'éliminer les doublons car ce que je souhaite c'est obtenir des combinaisons 'triées':
ex: 'a,a,a,a,b,b,b,b' et 'a,a,a,b,a,b,b,b' compterait pour la même combinaison.
Mais déjà avec vos solutions, je vais m'en accommoder.
Pour moi c'est toujours pas clair, mais mon intuition m'amène à ce code,
EDIT: Retrait d'une méthode join inutile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from itertools import product def get_all_combinations(letters, n=8): letters = set(letters) results = set() for c in product(letters, repeat=n): s = sorted(c) results.add(''.join(s)) return results res = sorted(get_all_combinations("abcd")) print(res[:20]) # affiche les 20 premiers éléments # print(res) affiche tous les éléments print(f"\nNombre d'éléments: {len(res)}") # 165 éléments possibles
Partager