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 :

liste avec variables


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Par défaut liste avec variables
    Bonjour je voudrais savoir s'il est possible (et si oui comment) de mettre des variables dans les listes à savoir que lorsqu'on fait appel à la liste celle-ci prend la valeur actuel de la variable dans la liste ?
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour !

    Je ne suis pas sûr de bien comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> toto = '5'
    >>> tata = '6'
    >>> titi = '7'
    >>> tutu = '8'
    >>> famille = [toto, tata, titi, tutu]
    >>> famille[0]
    '5'
    >>> toto = '55'
    >>> famille[0]
    '5'
    Donc non...

    Mais bon c'est normal.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Sauf si les valeurs sont des refs.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Sa demande n'est pas très claire à mon goût...

    En pratique on utilisera par exemple un dictionnaire :
    https://frederic-lang.developpez.com...a-python#LIV-7

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Je n'ai rien compris, mais je n'ai lu la question que trois fois
    Un exemple peut-être, ou alors expliquer quel est le but de la manoeuvre.

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 320
    Par défaut
    bonjour

    Question pas bien comprise, mais ton exemple est bien
    Citation Envoyé par LeNarvalo Voir le message
    Donc non...
    Mais bon c'est normal.
    Ici dans ton exemple, c'est que l'on va créer une autre variable nous perdons donc la référence au précédent objet et nous modifions en réalité un nouvel objet

    Si notre objet est mutable :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class Truc:
        def __init__(self, v):
            self.val = v
        def __repr__(self):
            return str(self.val)
        def inc(self):
            self.val += 1
        def set(self, v):
            self.val = v
     
     
     
    toto = Truc(5)
    tata = 6
    titi = 7
    tutu = 8
    fam = {"toto:": toto}
    famille = [toto, tata, titi, tutu]
    print(toto, famille, fam)
     
    #toto = Truc(55)  NON sinon c'est une autre variable que le précédent "toto"
    toto.inc()
    print(toto, famille, fam)
     
    toto.set("essai")
    print(toto, famille, fam)
    on change bien le contenu de la liste et dict directement via l'objet (de départ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    5 [5, 6, 7, 8] {'toto:': 5}
    6 [6, 6, 7, 8] {'toto:': 6}
    essai [essai, 6, 7, 8] {'toto:': essai}

  7. #7
    Invité
    Invité(e)
    Par défaut
    P'tite question au passage, il n'y a que la liste, le dictionnaire et le set qui soient mutables ?

  8. #8
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Par défaut
    Exemple :
    n=1
    list = ["banane", n]
    print list
    ça fait : banane, 1
    n=n+1
    print list
    banane, 2

    Je demande juste si on peut mettre des variables dans les listes.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    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 821
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ilelogique Voir le message
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n=1
    list = ["banane", n] 
    print list
    ça fait : banane, 1
    n=n+1
    print list
    banane, 2
    Je demande juste si on peut mettre des variables dans les listes.
    Oui
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> n=1
    >>> l=[n, n]
    >>> l
    [1, 1]

    Ensuite, la question est de savoir ce qui se passe si on modifie la variable.Mais la réponse dépend de savoir si la variable est "simple" ou "complexe"
    Tout ce qui est (int, flot, str) est "simple". Ici on a un int (n=1) donc simple. Elle a simplement été copiée dans la liste "l" donc son changement untérieur n'influe pas sur la liste...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> n=n+1
    >>> l
    [1, 1]
    >>>

    Tout ce qui est (liste, ensemble, dictionnaire, objet) est "complexe". Pour faire des économies, Python les copie alors par quelque chose qu'on peut appeler "référence" (ou "pointeur" pour ceux qui ont fait du C) car c'est plus rapide de copier la référence d'une liste que la liste complète. Mais (inconvénient) si on modifie la liste d'origine, ça impacte aussi la liste dans laquelle elle a été copiée.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> n=["xxx", "yyy"]
    >>> l=[n,n]
    >>> l
    [['xxx', 'yyy'], ['xxx', 'yyy']]
    >>> n[0]="toto"
    >>> l
    [['toto', 'yyy'], ['toto', 'yyy']]
    >>>

    Citation Envoyé par LeNarvalo Voir le message
    Par contre la syntaxe n += 1 pourrait être trompeuse, on pourrait se dire qu'on ne crée pas une nouvelle variable...
    Tu te rends compte que c'est le cas le jour où tu définis tes propres objets lesquels devront posséder l'opérateur d'addition...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class myInt:
    	def __init__(self, n):
    		print("init", self, n)
    		self.__value=n
    	def __del__(self):
    		print("del", self, self.__value)
    	def __add__(self, n):
    		print("add", self, n)
    		return myInt(self.__value + n)
     
    n=myInt(5)
    print(hex(id(n)))
    n+=1
    print(hex(id(n)))

    Au codage tu te rends compte que l'addition est obligée de retourner un nouvel objet. Et donc au résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    init <__main__.myInt object at 0x7f4e43db9de0> 5
    0x7f4e43db9de0
    add <__main__.myInt object at 0x7f4e43db9de0> 1
    init <__main__.myInt object at 0x7f4e43db9690> 6
    del <__main__.myInt object at 0x7f4e43db9de0> 5
    0x7f4e43db9690
    del <__main__.myInt object at 0x7f4e43db9690> 6
    Il y a d'abord création du 5, avant qu'il soit affiché. Puis quand l'addition est appelée, elle effectue successivement création du 6, puis suppression du 5 ; et le 6 est alors affiché. Puis enfin suppression du 6 quand le programme se termine.
    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]

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 320
    Par défaut
    Le plus simple est de savoir ce qui est immutable : bool, int, str, bytes, tuple, frozenset. Donc cet exemple ne fonctionne pas avec un tuple. Tout le reste est mutable.

    En reprenant ton nom de variable "famille", on peut ajouter des objets mutables "Personne" pour un exemple plus parlant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    papa = Personne("Papa", 45)
    maman = Personne("Maman", 42)
    Famille = [papa, maman]
    papa.age = 46
    ---------------
    Citation Envoyé par ilelogique Voir le message
    Exemple :
    n=1
    list = ["banane", n]
    print list
    ça fait : banane, 1
    n=n+1
    print list
    banane, 2

    Je demande juste si on peut mettre des variables dans les listes.
    j'ai répondu :
    Oui, nous avons des variables (des références sur ces variables) dans une liste et nous pouvons les modifier (si elles sont mutables)
    ici, tu vas créer une nouvelle variable n et en aucun cas modifier le variable n précédente (et le contenu de "list" pointe lui vers le n précédent donc ne change pas)
    Note: n est un entier et un entier est immutable...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Par contre la syntaxe n += 1 pourrait être trompeuse, on pourrait se dire qu'on ne crée pas une nouvelle variable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> n = 5
    >>> id(n)
    2335538020720
    >>> n += 1
    >>> id(n)
    2335538020752

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    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 821
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    P'tite question au passage, il n'y a que la liste, le dictionnaire et le set qui soient mutables ?
    Et tous les objets qui contiennent l'un de ces éléments. Par exemple un tuple est immuable sauf si un de ses éléments est une liste.
    Le test qui définit ça c'est la fonction hash(). Tu fais hash(truc), si le truc est immuable ça marche, s'il est mutable ça ne marche pas.
    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]

  13. #13
    Invité
    Invité(e)
    Par défaut
    Ah ok merci Sve@r c'est plus clair !

Discussions similaires

  1. Zone de liste avec variable
    Par ataahualpa dans le forum IHM
    Réponses: 7
    Dernier message: 10/01/2015, 08h30
  2. Réponses: 3
    Dernier message: 20/01/2011, 10h33
  3. [XSLT] trier une liste avec une variable
    Par ieuthm dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/04/2008, 21h56
  4. Réponses: 2
    Dernier message: 04/01/2008, 09h24
  5. Liste avec les variables anonymes
    Par bakhoucha dans le forum Prolog
    Réponses: 11
    Dernier message: 04/10/2006, 17h04

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