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 :

Enregistrer la valeur d'un élément d'une liste vers une variable, dynamiquement


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Enregistrer la valeur d'un élément d'une liste vers une variable, dynamiquement
    Bonjour,
    J'ai une liste à deux dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    liste = [[variable1, "valeur1", "parametre1"],
             [variable2, "valeur2", "parametre2"],
             [variable3, "valeur3", "parametre3"]]
    Et je cherche à parcourir cette liste pour, par exemple, enregistrer le résultat d'une opération qui utilise la valeur "valeur1" dans la variable "variable1".
    Evidemment, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for element in liste:
       element[0] = fonction(element[1])
    ça ne fera pas ce que je veux puisque je veux que ce soit les variables correspondantes (variable1, variable2, ..) aux valeurs (respectivement valeur1, valeur2, ..) qui soient modifiées et pas nécessairement l'élément de la liste.
    Il y a-t-il un moyen de faire celà ?
    (Je pars peut-être sur une mauvaise piste en utilisant une liste ?)
    Merci

  2. #2
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    ben ca dépend tu veux faire quoi avec tes variables une fois que tu les as affectées?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Je voulais pas en dire trop, histoire de pas trop surcharger mais c'est vrai qu'on peut pas trop comprendre ce que je veux faire.
    En fait, j'utilise ça dans une classe de gestion d'un gtk.TreeView.

    La liste contient autant d'élément qu'il y a de colonnes dans le TreeView et chaque élément est également une liste qui contient : le gtk.TreeViewColumn, le nom de la colonne et divers autres paramètres relatifs à cette colonne.

    La variable que je cherche à enregistrer contient dons le gtk.TreeViewColumn (pour pouvoir passer cette variable en argument d'une fonction pour supprimer la colonne, par exemple ...

    Pour le code complet, voir http://rafb.net/p/quFU1i66.html la liste en question est self.columnList

    En fait, on peut voir que je cherche à remplacer des expressions du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.column_name = self.AddListColumn(0, "Nom", 0)
    Puisque comme il y aura pas mal de colonnes, utiliser une liste pourrait éviter de devoir modifier partout dans le code si j'avais à ajouter une nouvelle colonne, par exemple.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Pourquoi ne pas itérer sur les indices plutôt que sur les éléments de ta liste?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in xrange(len(liste)):
       liste[i][0] = fonction(liste[i][1])

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Pourquoi pas ouais.
    Enfin, ça revient presque au même.
    Merci

    Sinon, concernant le problème : il est évident que je peux utiliser liste[0][0] au lieu de variable1 mais je choisi des variables avec des noms assez explicites pour savoir vers quoi elles pointent donc j'aimerai garder ça ...

    Il n'existe pas un moyen d'extraire un élément d'une liste pour l'utiliser en tant que nom de variable ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Je viens de comprendre. Ce que tu veux faire, c'est modifier la valeur de la variable dont la liste contient une référence ? Dans ce cas, je ne vois pas trop comment faire. Une solution élégante serait d'encapsuler cette variable dans un objet (exemple très basique mais suffisant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Conteneur(object):
        pass
    Ainsi, tu stockes le conteneur dans ta liste, et il te suffira d'affecter un attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for element in liste:
       element[0].val = fonction(element[1])

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par oiffrig
    Je viens de comprendre. Ce que tu veux faire, c'est modifier la valeur de la variable dont la liste contient une référence ?
    C'est bien ça.
    Par contre, je n'ai pas compris ta solution. Si tu peux expliciter un peu plus ...

    Sinon, je viens de trouver une solution :
    Au lieu d'utiliser une liste, j'utilise un dictionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dico = {"variable1" : ["valeur_var1", "valeur1", "parametre1"],
            "variable2" : ["valeur_var2", "valeur2", "parametre2"],
            "variable3" : ["valeur_var3", "valeur3", "parametre3"]}
    comme ça, je peux utiliser dico['variable1'][0] pour pointer sur "valeur_var1" et j'aurai donc un nom explicite.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    En fait, je crée une classe "vide", qui agira comme un conteneur.
    Puisque réaffecter la variable contenue dans ta liste "casse" la référence (l'objet variable1 n'est plus l'objet liste[0][0]), je l'encapsule dans un objet de ma classe Conteneur, je passe donc une référence au conteneur, auquel il me suffira d'ajouter la variable comme attribut. Il te suffira alors de modifier cet attribut à la place de ta variable.

    Le dictionnaire, c'est une solution, mais alors ce n'est plus exactement la même chose, tout dépend de l'utilisation que tu vas en faire.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Ah oui, en effet.
    En encapsulant ça dans un classe, c'est pas trop mal
    En fait, je débute avec la POO donc j'ai encore un peu de mal mais c'est vrai que ça sauve la mise, souvent
    Bref, le problème est résolu.
    Merci beaucoup !

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    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 : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> liste=['valeur_var1', 'valeur1', 'parametre1']
    >>> var1=[]
    >>> for element in liste :
    ...     var1.append(element)
    ... 
    >>> var1
    ['valeur_var1', 'valeur1', 'parametre1']
    ???

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Autant faire var1 = liste, presque, non ?
    Enfin, c'est pas du tout le résultat que je cherche ...
    Après, peut-être qu'avec des phrases, je comprendrais plus ce que tu cherches à dire

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    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 : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Ah je croyais que tu cherchais à affecter une liste à une variable

    quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> dico={"var1":["valeur_var1", "valeur1", "parametre1"]}
    >>> dico["var1"]
    ['valeur_var1', 'valeur1', 'parametre1']
    et que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> liste=['valeur_var1', 'valeur1', 'parametre1']
    >>> var1=[]
    >>> for element in liste :
    ...     var1.append(element)
    ... 
    >>> var1
    ['valeur_var1', 'valeur1', 'parametre1']
    n'est-ce pas le même résultat?

    Autant faire var1 = liste, presque, non ?
    ba oui tu as raison, pourquoi chercher compliqué?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> dico["var1"][0]
    'valeur_var1'
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> liste=['valeur_var1', 'valeur1', 'parametre1']
    >>> liste[0]
    'valeur_var1'
    Le résultat n'est pas le même?

    Sinon on peut aussi utiliser la fonction array avec le module numpy

    Où alors je n'ai vraiment pas bien compris la solution donnée précédemment

    Enfin bon je dis ca, j'essai d'aider quoi


  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Le résultat n'est pas le même?
    Si, mais seulement si le dico ne contient qu'un élément. Sinon, il faudrait autant de liste que le dictionnaire contient d'éléments ...
    Et comme par la suite j'ai besoin d'itérer sur le dictionnaire, c'est pas super pratique s'il y a plusieurs listes (il faudrait construire une liste supplémentaire pour itérer).

    Mais j'ai abandonné la solution du dictionnaire. Je préfère la solution de classe (conteneur) qui a été proposée par oiffrig.

    Citation Envoyé par fred1599 Voir le message
    Enfin bon je dis ca, j'essai d'aider quoi
    Je sais bien et je te remercie

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/04/2012, 17h32
  2. Réponses: 4
    Dernier message: 25/03/2010, 17h01
  3. Réponses: 4
    Dernier message: 25/03/2009, 17h19
  4. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50
  5. Basuler un élément d'une liste vers une autre liste
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 13/04/2006, 22h55

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