Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1081 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  2 listes identiques mais à différencier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

2 listes identiques mais à différencier

n°2246901
sdgkl
Posté le 24-12-2014 à 18:52:20  profilanswer
 

Bonjour,  
j'ai fais un programme sur python dans lequel j'ai deux listes (L1 et L2) qui sont identiques au début du programme, mais je me sers de ces deux liste dans une boucle for dans laquelle j'ai besoin de les différencier (puisque je veux ajouter des éléments à l'une et d'autres éléments à l'autre) et à la fin de la boucle je dis a python que ces listes sont de nouveau les mêmes pour qu'il puisse recommencer la boucle avec 2 mêmes listes. Le problème c'est que python confond les deux listes, du coup quand je veux modifier L2 il modifie en fait L1...
j'ai essayé d'ecrire L2=L1[:] ou L2=list(L1]  
mais ça ne marche pas.. merci pour votre aide  

mood
Publicité
Posté le 24-12-2014 à 18:52:20  profilanswer
 

n°2246922
dced
Posté le 25-12-2014 à 10:06:25  profilanswer
 

J'ai plus ou moins le même problème :(

Code :
  1. print(terrain)
  2. self.map = list(terrain)
  3. for ligne in self.map:
  4.       for i in range(0, len(ligne)):
  5.            ligne[i] = '.'
  6. print(terrain)


A la fin la liste terrain est modifiée alors que je modifie juste self.map et que les deux listes n'ont pas la même référence. A mon avis la réponse à ton problème sera la réponse à mon problème.


Message édité par dced le 25-12-2014 à 10:20:52
n°2246926
leonhard
Posté le 25-12-2014 à 16:32:04  profilanswer
 

sdgkl a écrit :

Bonjour,  
j'ai fais un programme sur python dans lequel j'ai deux listes (L1 et L2) qui sont identiques au début du programme, mais je me sers de ces deux liste dans une boucle for dans laquelle j'ai besoin de les différencier (puisque je veux ajouter des éléments à l'une et d'autres éléments à l'autre) et à la fin de la boucle je dis a python que ces listes sont de nouveau les mêmes pour qu'il puisse recommencer la boucle avec 2 mêmes listes. Le problème c'est que python confond les deux listes, du coup quand je veux modifier L2 il modifie en fait L1...
j'ai essayé d'ecrire L2=L1[:] ou L2=list(L1]  
mais ça ne marche pas.. merci pour votre aide  


 
Je ne comprends pas vraiment ce que tu veux. J'ai bricolé un petit exemple avec python 3.4
 

Code :
  1. >>> a = [1,2,3];
  2. >>> b = a[:]
  3. >>> a
  4. [1, 2, 3]
  5. >>> b
  6. [1, 2, 3]
  7. >>> a.append(4)
  8. >>> b.append(5)
  9. >>> a
  10. [1, 2, 3, 4]
  11. >>> b
  12. [1, 2, 3, 5]


 
donc le slicing produit bien une copie pour une liste plate.  
 

Code :
  1. >>> l1=[1,2,[3,4,[5,6], 7], 8]
  2. >>> l1
  3. [1, 2, [3, 4, [5, 6], 7], 8]
  4. >>> l2 = l1[:]
  5. >>> l2
  6. [1, 2, [3, 4, [5, 6], 7], 8]
  7. >>> l2.append(9)
  8. >>> l2
  9. [1, 2, [3, 4, [5, 6], 7], 8, 9]
  10. >>> l1
  11. [1, 2, [3, 4, [5, 6], 7], 8]
  12. >>> l1[2][2]
  13. [5, 6]
  14. >> l2[2][2].append(0)
  15. >>> l2
  16. [1, 2, [3, 4, [5, 6, 0], 7], 8, 9]
  17. >>> l1
  18. [1, 2, [3, 4, [5, 6, 0], 7], 8]


 
donc ça ne marche pas pour les listes imbriquées!  Pour faire une copie en profondeur, tu peux utiliser la fonction deepcopy:
 

Code :
  1. >>> import copy
  2. >>> l4 = copy.deepcopy(l3)
  3. >>> l3
  4. [1, 2, [3, 4, [5, 6], 7], 8]
  5. >>> l4
  6. [1, 2, [3, 4, [5, 6], 7], 8]
  7. >>> l4[2][2].append(11)
  8. >>> l4
  9. [1, 2, [3, 4, [5, 6, 11], 7], 8]
  10. >>> l3
  11. [1, 2, [3, 4, [5, 6], 7], 8]


 
Mais tout cela ne résoud que la première partie de ta question. La deuxième partie je ne l'ai pas (encore) comprise.
 
Bonne fête de Noël !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  2 listes identiques mais à différencier

 

Sujets relatifs
Dict et listes imbriquées ; comment faire ?listes chainées
Comparer deux listes en multicritèreslistes chainées et graphe
[MS DOS] copier un dossier sans écraser les fichiers identiquesTranscription listes R en structures C
[Caml] Listes et changementsDes listes en C..
scilab soustraction entre deux listeslistes déroulantes liées sur access 2010
Plus de sujets relatifs à : 2 listes identiques mais à différencier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR