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 :

aide Fonction recherche toute possibilitées [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut aide Fonction recherche toute possibilitées
    bonjour à tous

    dans mon programme j'aurais besoin d'une fonction me donne toute les possibilité de longueur n avec des nombres de 0 à n (inclut) et dont la somme est égale à n.

    concrètement si n = 3 je voudrait trouver une fonction qui me donne
    0,0,3
    0,1,2
    1,1,1

    j'ai trouvé la fonction combinations_with_replacement mais le souci est qu'elle me donne toutes les possibilités et pas seulement celles dont la somme vaut n
    donc pour n =3 combinations_with_replacement me donne :
    0,0,0
    0,0,1
    0,0,2
    0,0,3
    0,1,2
    ect...

    or je n'ai pas besoin des possibilité dont la somme n'est pas égale à n, et les calculer et les trier est donc une perte de temps énorme

    auriez vous une idée de fonction ou une possibilité de paramétrer la fonction combinations_with_replacement qui me permettrait de résoudre mon problème


    merci de votre aide

  2. #2
    Expert confirmé

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

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

    C'est toi qui dois faire le tri. Pour cela une fonction génératrice me semble appropriée.

    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
     
    import itertools
     
    def compute(n):
        vals = list(range(n+1))
        c = itertools.product(vals, repeat=n+1)
        for i in c:
            if sum(i) == n:
                yield i
     
    for i in compute(3):
        print(i)
     
    for i in compute(5):
        print(i)

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par VinsS Voir le message
    c = itertools.product(vals, repeat=n+1)
    Je crois qu'il faut mettre "repeat=n". Avec "n+1" on a un chiffre de trop (4 chiffres quand on cherche 3, 6 chiffres quand on cherche 5)...

    Citation Envoyé par VinsS Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for i in c:
            if sum(i) == n:
                yield i
    yield from (i for i in c if sum(i) == n)
    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]

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben, le PO a écrit n inclus

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Ben, le PO a écrit n inclus
    Oui, je ne parle pas de la valeur maximale des nombres de la liste, mais du nombre de ces nombres (il a demandé "de longueur n")
    Avec (par exemple) compute(3) le list(range(n+1)) initialise bien vals=[0, 1, 2, 3] ça c'est ok... mais en écrivant repeat=n+1 tu génères (3, 0, 0, 0) alors que le PO a demandé (3, 0, 0) qui s'obtient avec repeat=n.
    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]

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut merci
    super ça fonctionne et surtout c'est plus rapide

    il y a des opérations qui sont ensuite effectuer à chaque fois sur les valeurs trouvées donc il fallait optimiser ça

    pour vous donner une idée avec n=8

    avant : temps de calcul de 0.0568537712097168 secondes
    maintenant et grâce à vous : temps de calcul de 0.005019664764404297 secondes

    soit 10x plus rapide alors encore un grand merci à vous tous

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par VinsS Voir le message
    Pour cela une fonction génératrice me semble appropriée.
    combinations_with_replacement est déjà un générateur.

    Citation Envoyé par antond69 Voir le message
    auriez vous une idée de fonction ou une possibilité de paramétrer la fonction combinations_with_replacement qui me permettrait de résoudre mon problème
    Soit vous écrivez une fonction qui filtre ce qui est retourné par combinations_with_replacement (*), soit vous avez un algo. qui permette de fabriquer çà sans passer par la génération de toutes les combinaisons puis le filtrage.

    (*) la documentation vous donne un exemple de code de combinations_with_replacement que vous mouvez "améliorer". Ceci dit filtrer avant de les remonter ou après ne changera pas grand chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [XL-2013] Besoin d'aide fonctions recherche en VBA
    Par MattAdm33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/10/2015, 08h36
  2. [XL-2010] Fonction RECHERCHE toutes les 4 Valeurs
    Par Coxtox dans le forum Excel
    Réponses: 4
    Dernier message: 24/04/2015, 16h55
  3. Aide: fonction login toute simple
    Par t3__rrY dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 03/12/2013, 18h18
  4. Fonction "rechercher tout"
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/09/2009, 15h02
  5. Aide fonction recherche dans VBA
    Par Koopa55 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2008, 12h02

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