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 :

Toutes les combinaisons possibles (en plus complexe)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut Toutes les combinaisons possibles (en plus complexe)
    Bonjour,

    Je me retrouve plus face à un problème d'algo que de codage. Voici le problème:

    J'ai 2 listes de nombres qui contiennent chacun le même nombre de valeurs.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste1 = [2,4,4,6,6,12,12,12,16,18]
    liste2 = [1,1,1,2,2,4,4,4,4,4]
    Je voudrais obtenir l'ensemble des combinaisons de combinaisons de deux nombres (un de chaque liste) existantes, sans répétition d'une combinaison au sein d'une solution.
    Pour être plus clair par une exemple je voudrais qu'un des résultats soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[2,1],[4,1],[4,4],[6,4],[6,2],[12,1],[12,2],[12,4],[16,4],[18,4]]
    Merci beaucoup pour vos réponses

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    par exemple:

    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    liste1 = [2,4,4,6,6,12,12,12,16,18]
    liste2 = [1,1,1,2,2,4,4,4,4,4]
     
    liste3 = set()
     
    for item in liste1:
        for item2 in liste2:
            l = (item, item2)
            liste3.add(l)
     
     
    print liste3
    set([(6, 4), (18, 2), (16, 4), (12, 1), (12, 2), (6, 1), (4, 4), (16, 2), (2, 1), (18, 4), (16, 1), (12, 4), (6, 2), (2, 2), (4, 2), (4, 1), (2, 4), (18, 1)])

    Bon maintenant faut trier, mais le principal est là

    Vincent

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    liste1 = list(set([2,4,4,6,6,12,12,12,16,18]))
    liste2 = list(set([1,1,1,2,2,4,4,4,4,4]))
     
    liste3=[(x,y) for x in liste1 for y in liste2]
    print liste3
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 066
    Par défaut
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>>[(i,j) for i in set(liste1) for j in set(liste2)]
    [(2, 1), (2, 2), (2, 4), (4, 1), (4, 2), (4, 4), (6, 1), (6, 2), (6, 4), (12, 1), (12, 2), (12, 4), (16, 1), (16, 2), (16, 4), (18, 1), (18, 2), (18, 4)]
    après faut faire des paquets de 10 si j'ai bien comprite.
    ------------------------------------------------------------------
    arf, trop tard.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    ou bien on utilise les fonctions existantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from itertools import product
    combi = list(product(set(liste1), set(liste2)))
    ce qui donne exactement les résultats de josmiley et Zavonen.

    pour les petites listes, je préfère quand même la solution 'inline' de josmiley

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut
    Déjà un grand merci pour vos réponses, mais ce n'est pas exactement ce que je voulais. (Je comprends que j'explique mal, mais c'est assez complexe)
    Effectivement, vos solutions génèrent tous les couples possibles. Ce qu'il me faudrait c'est que chaque paquet de 10 couples soit formé qu'à partir des éléments dans la liste.

    Par exemple, la liste 1 contient un seul 2, donc il apparaitra qu'une seule fois dans le paquet.
    Et il faudrait que le script me sorte toutes les permutations des couples au sein d'un paquet.

    Encore merci pour l'usage de vos méninges!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Citation Envoyé par doloris Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste1 = [2,4,4,6,6,12,12,12,16,18]
    liste2 = [1,1,1,2,2,4,4,4,4,4]
    Pour être plus clair par une exemple je voudrais qu'un des résultats soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[2,1],[4,1],[4,4],[6,4],[6,2],[12,1],[12,2],[12,4],[16,4],[18,4]]
    au fait, pourquoi pas [18, 1] ?

    et pourquoi je voudrais qu'un des résultats?

    c'est pas clair pour moi..

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut
    je veux tous les résultats, là je donne un des résultats en exemple.

    Et pas [18,1] car, il faut consommer uniquement les nombres qu'il y a dans les listes. Ainsi, il y'a 10 chiffres par liste, la réponse ne peut faire que 10 couples.
    Et, c'est [18,4] le dernier couple car avant d'arriver à ce dernier couple, on a déjà utilisé dans la liste 1 tous les chiffres sauf le 18 et dans la liste 2, tous sauf le 4.

    Est-ce plus clair?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Citation Envoyé par doloris Voir le message
    je veux tous les résultats, là je donne un des résultats en exemple.

    Et pas [18,1] car, il faut consommer uniquement les nombres qu'il y a dans les listes. Ainsi, il y'a 10 chiffres par liste, la réponse ne peut faire que 10 couples.
    Et, c'est [18,4] le dernier couple car avant d'arriver à ce dernier couple, on a déjà utilisé dans la liste 1 tous les chiffres sauf le 18 et dans la liste 2, tous sauf le 4.

    Est-ce plus clair?
    je commence à comprendre

    En fait, on fait pas ce qu'on veut. Par exemple si on "mange" tous les nombres mais qu'on laisse 12 et 12 dans la première liste et 1 et 1 dans la deuxième, c'est qu'on s'est planté c'est ça?

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

Discussions similaires

  1. Afficher toutes les combinaisons possibles
    Par NELLLY dans le forum MATLAB
    Réponses: 1
    Dernier message: 07/01/2008, 21h09
  2. Algo pour toutes les combinaisons possibles
    Par rantanplan08 dans le forum Général Java
    Réponses: 6
    Dernier message: 03/01/2008, 09h45
  3. Réponses: 5
    Dernier message: 18/06/2007, 20h52
  4. Réponses: 16
    Dernier message: 20/10/2006, 16h31
  5. toutes les combinaisons possibles
    Par marocleverness dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/05/2006, 00h11

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