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 et calcul


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut Combinaisons et calcul
    Bonjour,

    Je débute complètement en python. Je cherche à générer des combinaisons d'objets et de calculer des sommes les caractérisants.
    Un peu confus donc je donne vite un exemple:

    J'ai 3 objets 'A','B','C' que je souhaite combiner entre eux par 2 par exemple.
    Afin d'obtenir ce résultat
    [['A', 'B'], ['A', 'C'], ['B', 'C']]

    Maintenant les objets ont ses caractéristiques
    A= [ST=5,SD=7,SA=2]
    B= [ST=1,SD=3,SA=3]
    C= [ST=2,SD=2,SA=4]

    Je souhaiterais qu'au lieu d'obtenir plus haut ['A', 'B'], avoir la somme de caractéristiques de 'A' et 'B' tel que [ST=6,SD=10,SA=5] et cela pour chacune des combinaisons possibles.
    Est ce facilement réalisable?
    Est ce possible ensuite de classer par ordre croissant les différents permutations en fonction de la somme sur le paramètre ST par exemple?

    Merci beaucoup

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut
    J'ai oublié de mettre mon début de reflexion ou j'arrive à afficher les différentes combinaisons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def comb(m, lst):
        if m == 0: return [[]]
        return [[x] + suffix for i, x in enumerate(lst)
                for suffix in comb(m - 1, lst[i + 1:])]
     
    seq=['A','B','C']
    print(comb(2, seq))
    qui m'affiche
    [['A', 'B'], ['A', 'C'], ['B', 'C']]

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par DantonLuc Voir le message
    Je souhaiterais qu'au lieu d'obtenir plus haut ['A', 'B'], avoir la somme de caractéristiques de 'A' et 'B' tel que [ST=6,SD=10,SA=5] et cela pour chacune des combinaisons possibles.
    Oui vous pouvez. Commencer par écrire :
    - une structure de données python contenant les informations. Car ceci:
    A= [ST=5,SD=7,SA=2]
    B= [ST=1,SD=3,SA=3]
    C= [ST=2,SD=2,SA=4]
    n'est pas du python. Vous pouvez faire un dictionnaire de dictionnaire par exemple

    - une fonction, que j'appelle somme, qui a un couple de 2 objets, vous ressortira la somme.

    Citation Envoyé par DantonLuc Voir le message
    Est ce possible ensuite de classer par ordre croissant les différents permutations en fonction de la somme sur le paramètre ST par exemple?
    Oui, en une ligne, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    combinaisons = comb(2, seq)
    totauxST = [ somme(c)['ST'] for c in combinaisons ]
     
    print(combinaisons)
    print(totauxST)
     
    print(sorted(  zip(totauxST, combinaisons) ))  ### il n'y a que cette ligne qui compte, le reste est fait avant

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut
    Merci pour votre réponse mais je n'ai pas tout compris...

    J'ai regardé les dictionnaires python et il faudrait donc que mes données sont écrites plutôt comme ceci:
    # Définitions des dictionnaires
    A = {5, 7, 2}
    B = {1, 3, 3}
    C = {2, 2, 4}

    Est ce possible de personnaliser les clés des dictionnaires en reprenant la syntaxe précédente? par ex:
    A= {ST:5, SD:7, SA:2}
    B= {ST:1, SD:3, SA:3}
    C= {ST:2, SD:2, SA:4}
    Car à terme, mes dictionnaires vont contenir une quinzaine d'informations et je vais m'y perdre...

    Au niveau de la fonction somme, j'ai du mal à la définir. Il faut ajouter les différentes valeurs mais comme les dictionnaires changent en fonction des combinaisons, je vois pas comment y arriver.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par DantonLuc Voir le message
    J'ai regardé les dictionnaires python et il faudrait donc que mes données sont écrites plutôt comme ceci:
    # Définitions des dictionnaires
    A = {5, 7, 2}
    B = {1, 3, 3}
    C = {2, 2, 4}
    Non, ca ce ne sont pas des dictionnaires. Vous avez un ensemble de valeurs là, et pas une association de clé et de valeur.

    Citation Envoyé par DantonLuc Voir le message
    Est ce possible de personnaliser les clés des dictionnaires en reprenant la syntaxe précédente? par ex:
    A= {ST:5, SD:7, SA:2}
    B= {ST:1, SD:3, SA:3}
    C= {ST:2, SD:2, SA:4}
    Car à terme, mes dictionnaires vont contenir une quinzaine d'informations et je vais m'y perdre...
    Oui les dictionnaires sont fait pour ca. Vous pouvez mettre n'importe quelle chaine de caractère en clé, et n'importe qu'elle élément (ca peut être un objet ou un autre dictionnaire meme) en valeurs. Et pour la taille, une quinzaine c'est de la rigolade, python peut gérer beaucoup plus. Il faut vous plonger dans un tuto avant de vous lancer dans des exos, car les dictionnaires sont des structures de bases qu'on voit très tôt dans l'apprentissage de python.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut
    Encore merci de m'aider.
    Je ne comptais pas vraiment devenir un expert en Python. j'ai juste le besoin de pouvoir faire une combinaison et un calcul ensuite sur ces combinaisons...

    A partir de 3 objets 'A','B','C' qui ont ses caractéristiques
    A= {'ST':5, 'SD':7, 'SA':2}
    B= {'ST':1, 'SD':3, 'SA':3}
    C= {'ST':2, 'SD':2, 'SA':4}

    obtenir cela
    La combinaison A, B donne ST=6,SD=10,SA=5
    La combinaison A, C donne ST=7,SD=9,SA=6
    La combinaison B, C donne ST=3,SD=5,SA=7

    Je pensais que cela serait plus facile

    Pour l'instant si je change mes dictionnaires en un gros, j'arrive à ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Définitions des dictionnaires
    seq={'A': {'ST':5, 'SD':7, 'SA':2},'B': {'ST':1, 'SD':3, 'SA':3},'C': {'ST':2, 'SD':2, 'SA':4}}
    for i in seq:
        print(i)
     
    sommeST=0;
    sommeST=sum([seq[i]["ST"] for i in seq])
    print("la somme ST est ",sommeST)
    il me retourne
    A
    B
    C
    la somme ST est 8

    Il faudrait que dans la première partie j'arrive à créer une liste sousseq=['A','B','C'], que je lance la fonction comb et que j'applique la deuxième partie sur le résultat...

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Oui voilà!

    Maintenant que vous avez écrit seq correctement, allons plus loin.
    Si on rassemble tout ce qui a été dit sur ce post, on peut obtenir 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # Définitions des dictionnaires
    seq={'A': {'ST':5, 'SD':7, 'SA':2},'B': {'ST':1, 'SD':3, 'SA':3},'C': {'ST':2, 'SD':2, 'SA':4}}
    for i in seq:
        print(i)
     
    names=list(seq) ### Autrement dit name=['A','B','C']
    print(names)
     
    def sommeST(list_of_name):
        sommeST=sum([seq[name]["ST"] for name in list_of_name])
        print("la somme ST est ",sommeST)
        return sommeST
     
     
    def comb(m, lst):
        if m == 0: return [[]]
        return [[x] + suffix for i, x in enumerate(lst)
                for suffix in comb(m - 1, lst[i + 1:])]
     
    combinaisons = comb(2, names)
    totauxST = [ sommeST(c) for c in combinaisons ]
     
    print(combinaisons)
    print(totauxST)
     
    print(sorted(  zip(totauxST, combinaisons) ))
    Si je vous dis qu'un dictionnaire est une structure de base de python, cela veut dire que justement, meme un débutant DOIT connaitre cela. Et que les dictionnaires ne sont pas réservés aux experts. Notez d'ailleurs qu'on ne devient pas experts en ouvrant des tutos. On s'initie à un langage, comme c'est votre cas, en ouvrant des tutos.
    L'expertise ensuite, elle vient par la pratique, et par la lecture de sujets plus pointus, qui sont totalement inaccessible à un novice. Mais là je ne vous parle pas du tout de cela. Je vous parle de simple dictionnaires...

Discussions similaires

  1. Calcul de combinaisons
    Par Vince dans le forum C#
    Réponses: 8
    Dernier message: 16/12/2010, 16h41
  2. calcul du nombre de combinaison possible
    Par Gunner4902 dans le forum Langage
    Réponses: 10
    Dernier message: 07/07/2008, 17h55
  3. Réponses: 3
    Dernier message: 05/05/2007, 09h12
  4. Réponses: 22
    Dernier message: 27/10/2006, 02h26
  5. Calcule d'une combinaison
    Par ccensam dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/04/2006, 19h02

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