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 :

fonction inverse de functools.reduce


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut fonction inverse de functools.reduce
    Bonjour

    Je débute en Python. J'ai écrit cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ## [1,1,0,1] => 13 
    def compute(Bits):
        return functools.reduce(lambda x, y: x*2+y, Bits,0)
    Qui comme son nom ne l'indique pas vraiment, prend une liste composée de 0/1 pour calculer l'entier correspondant.
    J'ai écrit la fonction inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ## 13 => [1,1,0,1]
    def explode(Val):
        q,r = divmod(Val, 2)
        if q == 0 :
            return [r]
        return explode(q)+[r]
    qui prend un entier et l'écrit comme une liste de 0/1.
    Je me demandais s'il n'existe pas une fonction toute faite qui ferait le boulot ?

    Merci
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Salut.
    Ca se fait tout simplement avec bin et int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> bin(13)
    '0b1101'
    >>> int("1101", base=2)
    13
    C'est présenté dans la FAQ.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par Trap D Voir le message
    Je me demandais s'il n'existe pas une fonction toute faite qui ferait le boulot ?
    Si le but est de convertir des entiers dans leurs représentations décimales et binaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = 13
    >>> bin(a)
    '0b1101'
    >>> int('1101', base=2)
    13
    >>>
    "reduce" est une opération qui vient d'un contexte bien plus compliquée.
    Et telle que définie, son inverse n'existe pas.

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

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> int("1101", 2)
    13
    >>> bin(13)[2:]
    '1101'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> "{0:b}".format(13)
    '1101'

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Merci beaucoup pour ces réponses, mais j'ai besoin d'une liste (ou d'un tableau) de valeurs 1/0, qui pourront être interprétées en vrai/faux.
    Je pense avoir trouvé mon bonheur avec les fonctions de EDA (voir Python EDA Documentation) que j'aurais besoin de toute façon d'utiliser
    >>> A = uint2exprs(5,4)
    >>> A
    farray([1, 0, 1, 0])
    >>> A.to_uint()
    5
    Je mets la discussion en résolu
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Avec ce qu'on t'as donné il est pas bien difficile de créer une liste à partir d'une chaîne de caractères.

    Pour faire l'inverse, c'est à dire liste à chaîne de caractères, on utilise join

    J'ai pas bien compris l'intérêt de la liste, car une chaîne est un objet tout autant itératif, et à moins que tu veuilles modifier un élément de ta liste, je conseillerais de rester avec une chaîne de caractères.

    Peut-être si tu nous en disais plus sur ton problème, on pourrait te guider dans un sens conceptuel et non syntaxique.

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    En fait mon but est d'adapter un code Prolog en Python. En Prolog on ne manipule que des listes, donc je me tourne vers les listes.

    Le code résout des Sudoku en utilisant des contraintes sur les valeurs logiques. Le solveur utilisé clpb ne connait que 0 et 1, donc si je veux que le nombre A soit différent du nombre B, il faut que un des bits de A soit différent du bit correspondant de B. Voilà pourquoi j'ai besoin de transformer mes nombres en listes (ou en tableaux si c'est plus facile à manipuler).
    Mon espoir est que je puisse adapter ma méthode Prolog à Python.

    Une première difficulté : en Prolog on peut utiliser des listes dont les éléments n'ont pas de valeurs définies, on dit "je veux une liste de longueur 4", on écrit length(L, 4) et Prolog me fournit une variable L = [_, _, _, _], les _ signifient que les 4 éléments ne sont pas unifiés (n'ont pas de valeur définie). En Prolog, une fois qu'une variable est unifiée, elle ne change plus de valeur, est-ce qu'on peut faire la même chose en Python ?

    Merci de vos réponses.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. [C#] fonction inverse de Color.ToString().
    Par OpenGG dans le forum C#
    Réponses: 8
    Dernier message: 08/11/2006, 10h15
  2. fonctions inverse en c
    Par deboraya dans le forum C
    Réponses: 8
    Dernier message: 18/10/2006, 14h21
  3. Fonction inverse de ASCII
    Par noirot dans le forum Oracle
    Réponses: 1
    Dernier message: 15/06/2006, 15h30
  4. Fonction inverse de InttoHex
    Par marsupilami34 dans le forum Langage
    Réponses: 11
    Dernier message: 06/07/2005, 15h04
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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