Partage
  • Partager sur Facebook
  • Partager sur Twitter

Combinaison spécifique

    29 novembre 2020 à 20:28:13

    Bonjour,

    Je veux retrouver le numéro d'une combinaison dans la liste supposant généré mais sans la générer pour éviter la perte de temps et de mémoire. Je sais pas comment faire.

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2020 à 2:03:40

      Précises un peu plus ta question. Il faut bien que les numéros entrés soient comparés à quelque chose.
      Doivent-ils être dans un ordre précis ou dans le désordre?
      Est-ce une erreur si j'entre un numéro plus d'une fois?
      Tu pourrais remplacer ta liste par une séquence de if elif ... else en cascade, mais ça risque de devenir affreux ...
      Est-ce qu'un tuple ou un set seraient acceptés?
      Dis-nous comment les numéros doivent être saisis.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        30 novembre 2020 à 10:44:44

        Bonjour,

        Merci pour votre réponse. Je voulais dire que supposant que je génère une liste de combinaisons avec "itertools"  je pouvais avoir le numéro d'une combinaison quelconque dans l'ordre de la liste par exemple si je génère une combinaison avec "AB" et deux caractère j'aurais cette liste : [AA,AB,BA,BB] le numéro de la combinaison "BA" dans la liste et 2. Mais moi je veux savoir ce numéro mais son génère la liste.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 novembre 2020 à 11:08:15

          Slt,

          Pas sur de tout avoir compris, tu veux dire obtenir la position de "AB" sans avoir à itérer (parcourir) la liste ?

          -
          Edité par Anonyme 30 novembre 2020 à 11:08:56

          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2020 à 11:11:31

            Salut,

            Une solution simple serait d'itérer sur les combinaisons en les comptant jusqu'à trouver celle voulue, mais ça ne semble pas très efficace.

            >>> from itertools import product
            >>> for i, comb in enumerate(product('AB', repeat=2)):
            ...     if comb == ('B', 'A'):
            ...         print(i)
            ...         break
            ... 
            2
            

            Non sinon la solution que je vois serait d'imaginer le texte entré comme un nombre. BA en base AB, c'est comme 10 en binaire (A=0 et B=1), donc 2. ABBAB serait 01101 soit 13, etc.

            Tu peux faire ça assez facilement en cherchant l'index dans une base (base='AB') : pour ABBAB tu aurais (((base.index('A') * len(base) + base.index('B')) * len(base)+ base.index('B')) * len(base)+ base.index('A')) * len(base) + base.index('B') soit 13.

            -
            Edité par entwanne 30 novembre 2020 à 13:19:11

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 novembre 2020 à 11:18:36

              Après si c'est seulement retrouver l'index d'un élément :

              liste.index("AB")



              • Partager sur Facebook
              • Partager sur Twitter
                30 novembre 2020 à 13:16:12

                Non, il veut éviter de calculer une liste contenant toutes les combinaisons, et je pense que dans l'idéal il est préférable de ne pas avoir à itérer tout court sur l'ensemble des combinaisons (surtout s'il y en a beaucoup).

                • Partager sur Facebook
                • Partager sur Twitter
                  30 novembre 2020 à 17:30:09

                  Il faudrait savoir si le problème se limite vraiment aux cas combinant 'a' et 'b' ou si ça peut inclure plusieurs symboles.
                  Et si on accepte les combinaisons de 1, 2, 3, etc. symboles.
                  S'ils sont consécutifs on peut faire comme dit entwanne avec sa base hexadécimale.
                  On pourrait utiliser ord(caractère) - ord(premier_caractère)
                  Est-ce que la liste (encore une liste ...) serait acceptée? Je pourrais m'en sauver en disant que ce n'est pas une liste mais une chaîne ...
                  Par exemple: "02468acegikmoqsuwz"
                  t

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                  Combinaison spécifique

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown