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.
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.
Le Tout est souvent plus grand que la somme de ses parties.
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.
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.
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).
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
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.
Le Tout est souvent plus grand que la somme de ses parties.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
Le Tout est souvent plus grand que la somme de ses parties.