首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一组整数中随机抽样

从一组整数中随机抽样
EN

Stack Overflow用户
提问于 2012-10-31 13:19:17
回答 2查看 939关注 0票数 2

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

number = random.randint ( x0 ,xn )

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

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

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

代码语言:javascript
运行
复制
thelist = [0]

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

这就是我想象的代码应该是什么样子,每次你循环时,一个数字被附加到列表中,所以每次它选择一个已经在列表中的数字时,它会再次重复循环,直到它使用了random.randint可以提取的所有数字。

EN

回答 2

Stack Overflow用户

发布于 2012-10-31 13:36:53

下面是一个混洗函数:

代码语言:javascript
运行
复制
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

如果你想要更多关于你提出的算法的东西,你可以这样做:

代码语言:javascript
运行
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2012-10-31 14:07:54

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

代码语言:javascript
运行
复制
import random

x0 = 5
xn = 15

full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13151690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档