IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Combinaisons de 8 lettres sur la base de 4


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Combinaisons de 8 lettres sur la base de 4
    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.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    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:

    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')
    Il y en a tout de même 10.518.300!

    Mais il y a bien sûr des redondances. A voir s'il faut les éliminer.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Bonsoir,

    Ce ne serait pas une réponse comme celle ci-dessous qu'on souhaiterait ?

    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'], ..., ...]
    Dans ce cas je penserai plus à la méthode product du module itertools et dans ce cas il n'y aurait que 65536 cas.

  5. #5
    Invité
    Invité(e)
    Par défaut
    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.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Pour moi c'est toujours pas clair, mais mon intuition m'amène à ce code,

    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
    EDIT: Retrait d'une méthode join inutile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion SYSDBA sur une base ou une autre
    Par jack554 dans le forum Administration
    Réponses: 11
    Dernier message: 20/04/2004, 17h11
  2. Filtre sur une base Paradox
    Par mika dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/03/2004, 11h51
  3. Alter user sur une base distante
    Par bilo2000 dans le forum Administration
    Réponses: 13
    Dernier message: 09/03/2004, 17h18
  4. calcul d'un point sur la base d'un cone
    Par Admin dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 18/11/2003, 21h18
  5. [Crystal] Performance sur grosses base de données
    Par Nico118 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 14/11/2003, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo