Voici un programme très simple:
[[], [], []] [1, 2, 3] [1, 2, 3] [1, 2, 3]
5 Réponses :
Vous devez faire pas p> désormais fonctionnant: p> 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 a = [[]] * 3 code> Vous obtenez la même liste [] code> trois fois dans une liste. le même em> 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). p> [] code>. Une nouvelle liste vide sera créée pour chaque itération sur xrange (3) code> (la différence entre plage code> et xrange code> n'est pas si important dans ce cas; Mais xRange code> est un peu meilleur, car il ne produit pas la liste complète des nombres et renvoie simplement un objet Itérateur à la place). P> p>
Serait mieux avec / expliquer et utiliser plage code>
@okm à moins que ce soit python 3x :)
Lorsque vous écrivez:
[1, 2, 3, 4]
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 em>. Donc 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. P> a [0] code>, a [1] code> et a [2] code> 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 () code> Les appels semblent être triplusés.
Il y a vraiment quelque chose que je ne reçois pas ici! P>
a = [[]] * 3 code> 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. P> < Pré> xxx pré>La même chose se produit si vous faites un = [{}] * 3` p>
En tant que tel, vous devez faire attention, vous pouvez faire une compréhension de liste
[[] pour _ en xrange (3)] code> ou définissez statiquement les 3 de vos tableaux[[], [], []] code>. p>xxx < / Pré> BlockQuote>
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], []]
Vous devriez utiliser une liste de listes i> au lieu d'une liste de liste (la même) que le titre déteste.