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 :

Générer les combinaisons


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Par défaut Générer les combinaisons
    Bonjour à tous,

    Etant donné une liste L=[0..n-1], j'aimerai écrire un programme qui me renvoie la liste de toutes les parties à k éléments de L.
    Je me doute qu'il va falloir travailler récursivement, j'ai tenté d'appliquer l'idée de la preuve de la formule de Pascal mais je n'aboutis pas, pourriez vous m'aider s'il-vous-plait?

    Merci

  2. #2
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    Bonjour,

    le mieux ce serait de nous montrer ce que tu as essayé pour qu'on reparte de là!
    Mais effectivement l'idée d'utiliser la récursivité s'applique bien ici, puisque on a (n k) + (n k+1) = (n+1 k+1).
    Détaille donc nous plus ton "je n'aboutis pas" ;-)

  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,

    Est-ce que ça répond à ta question, ou tu aimerais le programmer toi-même?

    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
    17
    from itertools import combinations
     
    x = [1,2,3,4,5]
     
    for y in combinations(x, 3):
        print(y)
     
    (1, 2, 3)
    (1, 2, 4)
    (1, 2, 5)
    (1, 3, 4)
    (1, 3, 5)
    (1, 4, 5)
    (2, 3, 4)
    (2, 3, 5)
    (2, 4, 5)
    (3, 4, 5)

  4. #4
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par simon55 Voir le message
    Etant donné une liste L=[0..n-1], j'aimerai écrire un programme qui me renvoie la liste de toutes les parties à k éléments de L.
    Bonsoir,
    Avez-vous pensé à regarder du coté du module itertools (de la bibliothèque standard)?

    Clodion

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Par défaut
    Merci pour vos réponses,

    Clodion & Tyrtamos : Effectivement, j'aimerai le programmer moi même.

    Mokochan : Voici ce que j'ai essayé, le problème est que je n'arrive pas à ressortir une liste convenable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def partition(L):
       if len(L)==0:
          return([])
       else:
          return([[L[0]]+partition(L[1:]),partition(L[1:])])

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 795
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par simon55 Voir le message
    Mokochan : Voici ce que j'ai essayé, le problème est que je n'arrive pas à ressortir une liste convenable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def partition(L):
       if len(L)==0:
          return([])
       else:
          return([[L[0]]+partition(L[1:]),partition(L[1:])])
    Bonjour

    T'as regardé l'exemple de tyrtamos ? T'en tires aucune conclusion ???
    Déjà il y a forcément une notion de "n" (nombres d'items demandés) à mettre en place. Ca me semble un peu évident. Certains demanderont une combinaison de 3 parmi 5, d'autres de 2 parmi 5 et d'autres de 4. Donc déjà là t'es complètement bancal.

    Ensuite ben pour n items tu pars des n premiers de ta liste puis tu prends le dernier demandé (3 dans l'exemple de tyrtamos) et tu itères jusqu'à la fin de la liste (4 et 5). Puis tu pars de cette nouvelle liste (1, 2, 4) et tu itères l'avant dernier (2) qui passe à 3. Puis 1, 4, 5 puis etc etc etc. Donc forcément il y aura une notion de boucle à mettre en place...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Je sais qu'on n'est pas là pour faire les devoirs des copains, mais un code bien algorithmique comme ça, je n'ai pas pu résister :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def part ( l,n ):
        if n == 0 :
            yield []
        elif n <= len( l ) :
            for p in part( l[1:],n-1 ): yield l[0:1] + p
            for p in part( l[1:],n   ): yield          p
     
     
    for n in xrange( 6 ):
        print '-----',n
        for p in part( [1,2,3,4],n ):
            print p
    Ça me rappelle le bon vieux temps du lisp...

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 030
    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 030
    Par défaut
    Oui c'est ce qu'on voit dans tous les pseudos code, une simple recherche de 2 minutes auraient suffit pour trouver ce type de code...

Discussions similaires

  1. Générer toutes les combinaisons possibles
    Par collosus dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2013, 13h54
  2. Réponses: 8
    Dernier message: 07/06/2013, 11h42
  3. Réponses: 0
    Dernier message: 04/02/2013, 13h03
  4. Générer toutes les combinaisons d'une suite
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/04/2008, 18h56
  5. Réponses: 16
    Dernier message: 20/10/2006, 16h31

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