【问题标题】:Trying to get my program to not duplicate random numbers试图让我的程序不重复随机数
【发布时间】:2015-04-16 09:38:18
【问题描述】:

我要求程序以随机​​顺序在网格中打印出数字 1 到 9。问题是当它打印出来时,它会有两次相同的数字。这是我到目前为止的代码:`import random 行 = 3 列 = 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]]

另外,那些双括号很烦人。有什么办法解决吗?

【问题讨论】:

标签: python list random


【解决方案1】:

使用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])

它还删除了双括号(假设你想要单个括号)并且只打印每一行一次(你原来的缩进会打印整个矩阵很多很多次:-)。

【讨论】:

  • 接受答案(单击答案左侧的绿色复选标记轮廓)始终是表达感谢的最佳方式(当然,只要您的问题已经过了足够的时间让您接受,当然: -)...
  • 尽我所能!
  • 那是另一台的意外,抱歉。我还发现其他答案很奇怪。而且我无法让它以我想要的确切方式工作,但我只是想感谢你提供了一些帮助。它有助于提供对事物的不同看法,我可以说这是一个很好且经过深思熟虑的答案。不幸的是,我认为我遇到的问题有点太复杂了,无法在这里问:(
  • @Jesse,可惜了!请记住,如果您不想要 所有 的数字 1 到 N,而只想要其中 X 以随机顺序不重复,random.sample 是您的朋友 - 以防万一你的其他并发症!-)
【解决方案2】:

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

例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多