你必须做
a = [[] for i in xrange(3)]
不
a = [[]]*3
现在可以正常工作:
$ cat /tmp/3.pya = [[] for i in xrange(3)]print str(a)a[0].append(1)a[1].append(2)a[2].append(3)print str(a[0])print str(a[1])print str(a[2])$ python /tmp/3.py[[], [], []][1][2][3]
当您执行类似操作时,
a = [[]]*3您会在一个列表中
[]三次获得相同的列表。 相同的
意思是,当您更改其中之一时,您也会更改所有它们(因为只有一个列表被引用了3次)。
您需要创建三个独立的列表来解决此问题。您可以通过列表理解来做到这一点。您在此处构造一个由独立的空列表组成的列表
[]。将为每次迭代创建一个新的空列表
xrange(3)(在这种情况下,
range和之间的区别
xrange并不那么重要;但是
xrange要好一些,因为它不会产生完整的数字列表,而只是返回一个迭代器对象)。



