【问题标题】:Random sampling from a set of integers从一组整数中随机抽样
【发布时间】:2012-10-31 05:19:17
【问题描述】:

我正在使用 python 3.2,我花了很多时间解决这个问题,但我似乎仍然无法解决它。

number = random.randint ( x0 ,xn )

我正在生成一个随机数。其目的是让我的代码每次都以不同的方式出现在我身上。

例如,我编写了 10 个文本变量。我已经解决了这些变量在每个程序运行时没有以相同的顺序出现的问题。

我遇到的问题是它们现在每次都随机出现。它每次都从 10 中选择一个,而不是第一次 10 和下一个 9。我似乎不知道如何排除以前的。

thelist = [0]

while i < x
     if number in thelist:
         >>>repeat<<<
     else:
         thelist.append (number)
         if ( number == x0 ):
             >>>something<<<
         elif ( number == x1 ):
             >>>something<<<

这就是我想象的代码的样子,每次循环时,都会在列表中附加一个数字,因此每次它选择列表中已经存在的数字时,它都会再次重复循环,直到它用完所有random.randint 可以提取的数字。

【问题讨论】:

  • 您可能正在寻找 random.sample() ?

标签: python list if-statement random


【解决方案1】:

这是一个随机播放函数:

import random

max = 15
x = list(range(max+1))

for i in range(max, 0, -1):
    n = random.randint(0, i)
    x[n], x[i] = x[i], x[n]

这从一个排序的数字列表开始[0, 1, ... max]

然后,它从索引 0 到索引 max 中选择一个数字,并将其与索引 max 交换。

然后,它从索引 0 到索引 max-1 中选择一个数字,并将其与索引 max-1 交换。

依此类推,对于 max-2, max-3, ... 1

正如 yosukesabai 正确指出的那样,这与调用 random.sample(range(max+1), max+1) 具有相同的效果。这会从 range(max+1) 中挑选 max + 1 唯一的随机值。换句话说,它只是打乱了顺序。文档:http://docs.python.org/2/library/random.html#random.sample

如果您想要更符合您提出的算法的内容,您可以这样做:

import random

max = 15
x = range(max+1)
l = []

for _ in range(max+1):
    n = random.randint(0,max)
    while n in l:
        n = random.randint(0,max)
    l.append(n)

【讨论】:

  • 我认为x[n], x[i] = x[i], x[n] 比使用temp 交换要好
  • @ragsagar 是的,我会更改我的代码。我经常忘记python的元组解包功能。
【解决方案2】:

根据我对您的描述和示例代码的理解,您希望thelist 以随机顺序以x0xn 之间的每个整数结束。如果是这样,您可以使用 random.shuffle() 非常简单地实现这一点,它会随机播放一个列表:

import random

x0 = 5
xn = 15

full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)

【讨论】:

    猜你喜欢
    • 2016-09-06
    • 2016-11-19
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多