试图让我的程序不重复随机数

时间:2015-02-15 22:22:19

标签: python list random

我要求程序在网格中以随机顺序打印出数字1到9。问题是,当它打印出来时,它将具有两次相同的数字。这是我到目前为止的代码:`import random     rows = 3     cols = 3

values = [[0,0,0]]

for r in range(rows):
    for c in range(cols):
        values [r][c] = random.randint(1, 9)
        print(values)

`

和示例输出: [[6, 0, 0]] [[6, 4, 0]] [[6, 4, 2]]

另外,那些双括号很烦人。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

使用random.shuffle随机化所需数字的顺序

import random

numbers = list(range(1, rows * cols + 1))  # good for Py 2 *and* 3
random.shuffle(numbers)
values = [[0] * cols for r in rows]

(后者是为了避免重复values并使其大小合适 - 我看不出原始代码如何无法引发异常!)。

然后:

for r in range(rows):
    for c in range(cols):
        values[r][c] = numbers(r + rows * c)
    print(values[r])

也删除了双括号(假设您需要单个括号)并且只打印每一行一次(您的原始缩进将打印整个矩阵很多次: - 。)。

答案 1 :(得分:0)

如果您不介意使用numpy,请尝试numpy.random.shuffle()

示例:

import numpy
xx = numpy.arange(10)
numpy.random.shuffle(xx)
print xx