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 :

demande explication sur boucle "FOR"


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut demande explication sur boucle "FOR"
    bonjour à tous.

    je ne parviens pas a m'expliquer le résultat obtenu avec la commande "for".

    en travaillant sur un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> a=['un','#','deux','#','trois','#','quatre']
    >>> b=a
    >>> c=a
    >>> az=0
    >>> aze=0
    >>> for i in a:
    ...     if i != '#':
    ...             print i # pour le fun
    ...     else:
    ...             del(a[az])
    ...     az=az+1
    ...
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> a
    ['un','deux','trois','quatre']
    mais aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> b
    ['un','deux','trois','quatre']
    >>> c
    ['un','deux','trois','quatre']
    je ne comprend pas. les liste "b et c" n'airaient du rester à limage de la liste "a" d'origine.
    et pourtant non.

    si quelqu'un à une explication. merci à lui.

    ps : Python 2.5.2 [GCC 4.3.2] on linux2

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 535
    Points
    2 535
    Par défaut
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=['un','#','deux','#','trois','#','quatre']
    b=a
    Tu as deux variables qui font référence à la même liste.

    Si tu veux dupliquer ta liste, tu dois faire soit ou

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    merci.

    donc:
    une liste appliquer à une variable ne fait pas cette dernière une liste.

    c'est pourquoi, une action sur la liste modifie les variables qui lui sont rattacher. (j'ai bon ? ou je mouline grave ?)

    et dans un autre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> a=['un','#','deux','#','trois','#','quatre']
    >>> bobo=a
    >>> c=a
    >>> az=0
    >>> az=0
    >>> for i in bobo:
    ...     if i != '#':
    ...             print i # pour le fun
    ...     else:
    ...             del(bobo[az])
    ...     az=az+1
    ...
    mais alors pourquoi en agissant sur la variable "bobo", la liste "a" change? (ainsi que les autre variables rattacher à la liste "a")

  4. #4
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 535
    Points
    2 535
    Par défaut
    A partir du moment ou tu affectes à une variable une autre qui correspond à une liste, tu ne fais que créer un alias de cette variable et que tu agisses sur la première variable 'a' ou la deuxième 'bobo', c'est la même chose.

    En mémoire ta liste est stocké à un emplacement :

    Par exemple :

    Octet 12 -> u
    Octet 13 -> n
    Octet 14 -> #
    Octet 15 -> d
    Octet 16 -> e
    Octet 17 -> u
    Octet 18 -> x
    etc

    'a' pointe donc sur le début de la liste, c'est à dire l'octet 12. Quand tu fais bobo = a, tu ne fais que dire : fais pointer bobo vers le même emplacement que a, donc bobo pointe aussi sur l'octet 12. Maintenant quand tu modifies les valeurs de ta liste, les 2 variables reflètent cette modification, vu qu'elle pointent toutes les 2 vers le même emplacement mémoire.

    En gros tu dis a = bobo = emplacement mémoire 12

    J'espère que j'ai été assez clair !

    C'est pas exactement comme ça que ça se passe, mais sur le principe c'est ça, c'est comme les pointeurs en C.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    merci pour cette explication.
    sans rentrée dans les fondements. l'illustration du principe est simple et compréhensible.


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

Discussions similaires

  1. Demande explication sur 1 CSS
    Par tigunn dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/03/2007, 17h27
  2. Demande explication sur un composant ADO
    Par Golork dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/07/2005, 20h22

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