我在python中有以下代码:
#-*-coding:cp1252-*-
from random import randint
matriz = [[0] * 5] * 5
print matriz
for i in range(5):
for j in range(5):
numero = randint(0,10)
matriz[i][j] = numero
for i in matriz:
print i
为什么所有行都相同?
例如,生成一个随机双重列表:
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
感谢。
答案 0 :(得分:2)
这归因于Python如何处理变量,当你执行matriz = [[0] * 5] * 5
时,列表matriz
的每个元素都是指向内存中相同列表的指针。
要完成您想要做的事情,请使用此matriz = [ [0]*5 for n in xrange(5)]
,以便每个子列表在内存中都是自己的列表。
答案 1 :(得分:1)
您的矩阵由5个对同一列表的引用组成。避免它的最短路径是一些嵌套理解:
> m = [[random.randint(1,10) for _ in xrange(5)] for _ in xrange(5)]
> m
[[9, 4, 4, 10, 10], [1, 2, 4, 3, 5], [3, 4, 8, 9, 10], [5, 9, 4, 3, 3], [3, 3, 8, 6, 7]]