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 :

création et modification de liste


Sujet :

Python

Vue hybride

manaliac création et modification de... 05/07/2010, 17h40
N.tox Publier ta fonction... 05/07/2010, 19h22
eyquem Salut, Quand une chose... 05/07/2010, 20h02
manaliac Bonjour, Voici ma fonction... 06/07/2010, 09h57
eyquem Tes codes sont inutilisables... 06/07/2010, 18h26
rambc Peut-être faudrait-il tout... 06/07/2010, 21h15
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut création et modification de liste
    Bonjour,

    A partir de deux listes j'essaie de créer une nouvelle liste contenant les deux premières listes avec quelques changements effectués.

    Du genre :

    liste1 =[a1,a2]
    liste2 =[b1,b2]

    et mon programme est du type : (simplifié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for a in liste1:
        for b in liste2:
             if a[0] == b[0]:
     
                (val1,val2) = MatchData ( a,b) # ceci est une fonction qui renvoie deux vecteurs val1 et val2 qui contiennent soit la valeur 1 ou -1 ( logique)
                 block = Construct_blk (val2,val1, a,b) # block est ma nouvelle liste
             else:
                 continue
    le problème est que la fonction Construct_blk remplace dans chaque boucle for un élément de la liste2 par un nouvel élément block.

    Ce qui fait que liste2 se retouve avec des éléments block et que la boucle for se fait désormais sur la liste block !!!

    Je n'arrive pas à corriger le problème !!
    Je voudrais créer une liste à partir des deux premières sans qu'elles soient modifiées!!
    Si vous savez comment éviter ce problème faites moi savoir!
    M.

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Publier ta fonction construct_blk serait sûrement d'une grande aide pour pouvoir voir ce ne va pas à l'intérieur

    plusieurs questions :
    • quel est le type de a[0] ? un entier, un float, une liste, un tuple
    • tu dis que val1 et val2 sont des vecteur ayant pour valeur 1 ou -1.. ça veux dire que ce sont des vecteur à une composante ? (ex: [1] ou [-1])
    • concrètement, à quoi doit ressembler la troisième liste ?


    Je voudrais créer une liste à partir des deux premières sans qu'elles soient modifiées!!
    il te seras utile de retenir cette facon de copier une liste "a" : b=a[:]
    pourquoi la copier ? pour une raison que le code expliquera mieux que moi ou de long discours :
    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
    >>> a=[1,2]
    >>> b=a
    >>> b.append(3)
    >>> b
    [1, 2, 3]
    >>> a
    [1, 2, 3]
    >>> #b et a sont un seul et même objet
    >>> #par contre
    >>> a
    [1, 2, 3]
    >>> b=a[:]
    >>> b.append(4)
    >>> b
    [1, 2, 3, 4]
    >>> a
    [1, 2, 3]

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,



    Quand une chose ne convient pas , il ne faut pas la faire:

    modifier la liste dans laquelle on itère pose problème
    => il ne faut pas modifier la liste dans laquelle on itère.

    Qui l’eût cru !?



    Mais comme tu veux quand même bien modifier une liste, renversons les choses:

    modifier la liste dans laquelle on itère pose problème
    => il ne faut pas itérer dans la liste qu’on modifie.



    Donc il faut créer un double de la liste initiale pour itérer dedans.



    Il se peut que cette proposition soit insuffisante, mais je pense comme N.tox: ton problème est exposé de façon trop imprécise pour pouvoir en dire plus.







    2 remarques:



    - il est illogique d’écrire:

    dans chaque boucle for
    Le mot “chaque“ donne à boucle la signification de “tour“, “pas d’itération“

    la boucle for se fait désormais sur la liste
    si la boucle se fait sur la liste, c’est qu’elle comporte plusieurs tours, un tour pour chaque élément C'est une itération

    Dans deux phrases, le mot boucle signifie deux choses différentes.





    - il n’y a pas de structure de données qui s’appellent vecteurs en Python. Pitié !, arrêtons d’employer ce terme qui ne veut rien dire.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,

    Voici ma fonction Construct_blk simplifiée :

    exemple de a : a =[1,12,1,15,2,6] ce sont des listes d'entiers
    exemple de b : b=[1,20,1,10,1,15]
    exemple de val1: val1 =[1,-1,1,1,-1,-1]

    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
    def Construct_blk(val2,val1,,a,b): # il y a plus d'instructions que cela mais elles sont basiquement pareilles
     
         if (val2[0]==-1 and val2(1] == -1):
            if val1[0]==1:
               b[1][0]= a[1][0]
     
            else:
               b[1][0]= a[1][3]
     
            if val1[1]== -1:
               b[1][1]= a[1][4]
            else:    
               b[1][1]= a[1][1]
         blk = a
         blk1 = blk.extend(b)
         block.append(blk1)    
         else:
             continue
    la nouvelle liste doit ressembler à ce ci : block=[a, b_modifiée] si les conditions if sont vraies.

    Je connais le principe de copier les listes soit par un : a =b[:] ou a = copy.copy(b), et je peux l'utiliser pour garder ma première liste intacte, mais cela ne résout pas mon problème!

    Car une fois que ma nouvelle liste est créée, la partie b_modifiée est stockée dans la liste2 ( que cette liste2 soit copiée ou pas) et remplace la liste b ancienne, et donc cela ma crée des problèmes dans la boucle for:


    M.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Tes codes sont inutilisables , ils contiennent des fautes.


    Le plus épineux c’est que si b=[1,20,1,10,1,15]
    qu’est ce que b[1][0] ???!

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Peut-être faudrait-il tout poser à plat ? Que cherches-tu à faire concrètement avec tes listes ? On pourra peut-être proposer une jolie solution...

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par rambc Voir le message
    Peut-être faudrait-il tout poser à plat ? Que cherches-tu à faire concrètement avec tes listes ? On pourra peut-être proposer une jolie solution...
    S'il y avait eu un peu de conception descendante, nous ne parlerions plus de liste mais de classes. Pas facile d'apprendre à faire de la conception sur un domaine à découvrir avec des moyens d'expressions comme Python qui ne peuvent être utilisés pour "concevoir" que lorsqu'on est 'fluent'.
    Je n'ai pas de solution.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. création et modification DBase dbf
    Par Hypollite76 dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/09/2006, 13h01
  2. [DOS-BATCH] Création script modif arborescence
    Par stygre dans le forum Windows
    Réponses: 2
    Dernier message: 19/07/2006, 14h02
  3. PHP et MYSQL pour création et modification
    Par guillaumeIOB dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 03/05/2006, 18h53
  4. Formulaire modification enregistrement Liste
    Par kikaillo dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 09h16
  5. [Conception] Création d'un Mailing List via une BDD
    Par Matmax dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 12/04/2006, 14h23

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