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 :

Trouver une somme via une liste de chiffres


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Par défaut Trouver une somme via une liste de chiffres
    Bonjour bonjour,

    Voilà je viens un peu vous embêtez sur un petit problème : comment trouver une somme(un chiffre) via une liste de chiffre ?

    par exemple :

    Ma somme est de 50 (déjà prédéfini) et j'ai une liste de 10 chiffres [1,9,7,15,99,32,41,17,87,100].
    J'aimerai savoir si ma somme peut-être trouvé en additionnant 2 chiffres de la liste des 10 chiffres.

    J'ai testé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(len(list_chiffre)):
         for n in range(len(list_chiffre)):
              LaSomme = list_chiffre[i] + list_chiffre[n]
              if LaSomme == Somme:
                   print "La somme à été trouvé"
    break
    Voilà sauf que si il y a beaucoup de chiffre dans la liste... Ca met du temps ! Donc y aurait-il meilleur méthode ?

    Merci à vous

  2. #2
    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 Guignon Voir le message
    Bonjour bonjour,

    Voilà je viens un peu vous embêtez sur un petit problème : comment trouver une somme(un chiffre) via une liste de chiffre ?

    par exemple :

    Ma somme est de 50 (déjà prédéfini) et j'ai une liste de 10 chiffres [1,9,7,15,99,32,41,17,87,100].
    J'aimerai savoir si ma somme peut-être trouvé en additionnant 2 chiffres de la liste des 10 chiffres.

    J'ai testé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(len(list_chiffre)):
         for n in range(len(list_chiffre)):
              LaSomme = list_chiffre[i] + list_chiffre[n]
              if LaSomme == Somme:
                   print "La somme à été trouvé"
    break
    Voilà sauf que si il y a beaucoup de chiffre dans la liste... Ca met du temps ! Donc y aurait-il meilleur méthode ?

    Merci à vous
    Coucou,
    Heu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SOMME = 50
    for base in list_chiffre:
        if (SOMME - base) in list_chiffre:
            print(base, (SOMME - base))
            break
    Non?

    Clodion

    PS: et pour la liste des combinaisons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SOMME = 50
    k = [[x, SOMME - x] for x in list_chiffre if SOMME - x in list_chiffre]
    print(*k, sep = "\n")

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Par défaut
    Ca m'a l'air cool, Je test ça prochainement

    Merci !

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Pour accélérer le calcul, tu peux convertir list_chiffre en un set (ensemble); l'opération in sera beaucoup plus rapide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s = set(list_chiffre)
    print any(SOMME-x in s for x in s)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Par défaut
    Bonjour bonjour,

    Revenons à nos moutons!

    Ah oui set accélère considérablement le temps de calcul ! Magnifique
    Mais en faite je n'ai pas trop compris ce que faisait ceci (j'ai mis ce que j'ai fais):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s = set(Liste_Variente_AllData)
    k = [[x, SOMME - x] for x in s if SOMME - x in s]
    Je cherche à trouver, pour une SOMME, 2 "x" qui, additionné, correspondrait à la SOMME. Si vous voyez ce que je veux dire !

    Car lorsque je print k, les résultats ne se suivent pas et ne correspondent pas.

    Merci bien

    Edit: ou si vous avez une idée d'une méthode qui vous passerai par la tête

    Re edit : Du coup j'ai fait un truc comme ça :

    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
     
    SOMME = int(LaVarience_J)
    s = set(Liste_Variente_AllData)
    k = [[x, SOMME - x] for x in s if SOMME - x in s]
    Liste_Possibilite = []
    for Nx in range(len(k)):
         Le_Nx = k[Nx][0]
         La_Somme_Moins_X = k[Nx][1]
     
         for search_x2 in range(len(k)) :
              if k[search_x2][0] == La_Somme_Moins_X:
                   #Index_x = k.index(Le_Nx)
                   La_Second_Valeur = k[search_x2][0]
                   #print La_Second_Valeur
                   Data = [SOMME, Le_Nx, La_Second_Valeur]
                   Liste_Possibilite.append(Data)

  6. #6
    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 Guignon Voir le message

    Mais en faite je n'ai pas trop compris ce que faisait ceci (j'ai mis ce que j'ai fais):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s = set(Liste_Variente_AllData)
    k = [[x, SOMME - x] for x in s if SOMME - x in s]
    Car lorsque je print k, les résultats ne se suivent pas et ne correspondent pas.
    Bonjour,
    La fonction set transforme la liste en … ensemble (set).
    C'est à dire, un ensemble de valeurs non ordonnées et non redondantes.
    Pour bien comprendre… Il suffit de faire quelques essais dans le shell Python! :-)

    Chez moi, selon les contraintes que j'ai compris au premier message, cela fonctionne parfaitement.
    Par contre, les données ne peuvent pas être ordonnées (puisqu'elles sont obtenues à partir d'un ensemble).

    Ce que fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    k = [[x, SOMME - x] for x in s if SOMME - x in s]
    -"for x in s": x prends tour à tour chacune des valeurs de s (mais il n'y a pas d'ordre)
    -"if SOMME - x in s": à condition que la valeur "SOMME - x" soit présente dans s
    -alors on ajoute la liste [x, SOMME - x] à la liste k

    Heu, sinon,
    Citation Envoyé par Guignon Voir le message
    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
     
    SOMME = int(LaVarience_J)
    s = set(Liste_Variente_AllData)
    k = [[x, SOMME - x] for x in s if SOMME - x in s]
    Liste_Possibilite = []
    for Nx in range(len(k)):
         Le_Nx = k[Nx][0]
         La_Somme_Moins_X = k[Nx][1]
     
         for search_x2 in range(len(k)) :
              if k[search_x2][0] == La_Somme_Moins_X:
                   #Index_x = k.index(Le_Nx)
                   La_Second_Valeur = k[search_x2][0]
                   #print La_Second_Valeur
                   Data = [SOMME, Le_Nx, La_Second_Valeur]
                   Liste_Possibilite.append(Data)
    que donne ma première proposition?
    Avez-vous essayer de trier k tout simplement?
    Clodion

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

Discussions similaires

  1. [SP-2010] Faire une somme sur une colonne d'une liste
    Par sebfreu dans le forum SharePoint
    Réponses: 6
    Dernier message: 19/01/2012, 11h05
  2. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. [CR X]Effectuer une somme d'une somme
    Par Chuppas dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/08/2008, 10h52
  5. Réponses: 2
    Dernier message: 17/04/2007, 17h14

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