在双零列表中分配随机数

2024-05-20 18:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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]

谢谢。你知道吗


Tags: 代码infromimport列表forrangerandom
2条回答

这归因于Python处理变量的方式,当您执行matriz = [[0] * 5] * 5时,列表matriz的每个元素都是指向内存中相同列表的指针。你知道吗

要完成您想做的事情,请使用这个matriz = [ [0]*5 for n in xrange(5)],以便每个子列表在内存中都是自己的列表。你知道吗

你的矩阵由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]]

相关问题 更多 >