6
votes

Python: Comment appendez-vous de nouveaux éléments dans une liste de liste?

Voici un programme très simple:

 [[], [], []]
 [1, 2, 3]
 [1, 2, 3]
 [1, 2, 3]


1 commentaires

Vous devriez utiliser une liste de listes au lieu d'une liste de liste (la même) que le titre déteste.


5 Réponses :


12
votes

Vous devez faire xxx

pas xxx

désormais fonctionnant: xxx < p> Lorsque vous faites quelque chose comme a = [[]] * 3 Vous obtenez la même liste [] trois fois dans une liste. le même signifie que lorsque vous en chanez l'un d'entre eux, vous les utilisez tous (car il n'y a qu'une seule liste qui est référencée trois fois).

Vous devez créer trois listes indépendantes. contourner ce problème. Et vous faites cela avec une compréhension de la liste. Vous construisez ici une liste consiste en des listes vides indépendantes [] . Une nouvelle liste vide sera créée pour chaque itération sur xrange (3) (la différence entre plage et xrange n'est pas si important dans ce cas; Mais xRange est un peu meilleur, car il ne produit pas la liste complète des nombres et renvoie simplement un objet Itérateur à la place).


2 commentaires

Serait mieux avec / expliquer et utiliser plage


@okm à moins que ce soit python 3x :)



5
votes

Lorsque vous écrivez:

[1, 2, 3, 4]


0 commentaires

5
votes

Le problème fondamental avec votre approche est que lorsque vous multipliez la liste de trois, la liste résultante contient trois de la même liste . Donc a [0] , a [1] et a [2] Toutes référence la même chose. Lorsque vous annoncez à l'une d'entre elles, vous appuyez sur la même liste. C'est pourquoi l'effet de votre append () Les appels semblent être triplusés.

Au lieu de cela, génèrent votre liste de listes sans référencer la même liste. À titre d'exemple, vous pouvez utiliser la compréhension de la liste, comme. xxx


0 commentaires

1
votes

Il y a vraiment quelque chose que je ne reçois pas ici!

a = [[]] * 3 Le problème ici est que vous définissez les listes pour être la même référence, car les tableaux ainsi que les dictionnaires sont stockés sous forme de références. < Pré> xxx

La même chose se produit si vous faites un = [{}] * 3`

En tant que tel, vous devez faire attention, vous pouvez faire une compréhension de liste [[] pour _ en xrange (3)] ou définissez statiquement les 3 de vos tableaux [[], [], []] . xxx < / Pré>


0 commentaires

2
votes

Cela vous donnera une idée claire, dans L, tous les objets ont le même ID () et tous sont mutables, de sorte que l'un d'entre eux modifiera automatiquement les autres, car ils ne font que référence à un même objet avec ID = 18671936 et en m ont tous des identités différents (), donc tous sont des objets différents.

>>> a=[[] for _ in range(4)]
>>> a[0].append(1)
>>> a[2].append(5)
>>> a
[[1], [], [5], []]


0 commentaires