首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用参数进行python混洗以获得相同的结果

使用参数进行python混洗以获得相同的结果
EN

Stack Overflow用户
提问于 2013-10-11 05:59:49
回答 4查看 64.1K关注 0票数 83
代码语言:javascript
复制
import random
x = [1, 2, 3, 4, 5, 6]
random.shuffle(x)
print x

我知道如何对列表进行混洗,但是否可以使用一个参数对其进行混洗,使得每次混洗都会产生相同的结果?

就像这样;

代码语言:javascript
复制
random.shuffle(x,parameter)

对于此参数,结果是相同的。假设参数是4,每次的结果都是[4, 2, 1, 6, 3, 5]

EN

回答 4

Stack Overflow用户

发布于 2013-10-11 06:30:05

正如the documentation解释的那样:

此模块提供的函数实际上是random.Random类的隐藏实例的绑定方法。您可以实例化自己的Random实例,以获得不共享状态的生成器。

因此,您可以使用自己的种子创建自己的random.Random实例,这完全不会影响全局函数:

代码语言:javascript
复制
>>> import random
>>> x = [1, 2, 3, 4, 5, 6]
>>> random.Random(4).shuffle(x)
>>> x
[4, 6, 5, 1, 3, 2]
>>> x = [1, 2, 3, 4, 5, 6]
>>> random.Random(4).shuffle(x)
>>> x
[4, 6, 5, 1, 3, 2]

(您还可以保留Random实例并重新seed它,而不是一遍又一遍地创建新实例;这没有太大的区别。)

票数 176
EN

Stack Overflow用户

发布于 2013-10-11 06:03:04

您可以设置随机生成器的seed (它接受parameter),这将决定您的随机方法

代码语言:javascript
复制
import random
x = [1, 2, 3, 4, 5, 6]
random.seed(4)
random.shuffle(x)
print x

并且结果应该总是

代码语言:javascript
复制
[2, 3, 6, 4, 5, 1]

为了“重新随机化”剩下的代码,您可以简单地用系统时间重新设定随机数生成器的种子,方法是运行以下命令

代码语言:javascript
复制
random.seed()

在代码的“确定性”部分之后

票数 35
EN

Stack Overflow用户

发布于 2015-04-17 03:16:57

random使用固定值的混洗不能很好地工作!示例:

代码语言:javascript
复制
from random import shuffle
v = sum([[k] * 100 for k in range(10)], [])
print v[:40]
shuffle(v, random = lambda: 0.7)
print v[:40]

给出输出:

代码语言:javascript
复制
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 8, 0, 0, 9, 0, 0, 0, 9, 0, 0, 8, 0, 0, 7, 0, 0, 0, 9, 0, 0, 7, 0, 0, 8, 0, 0, 0, 7, 0, 0, 7, 0, 0, 8, 0, 0, 0, 9]

对于其他种子也是一样的--不是很随机(至少乍一看...很难证明)。这是因为random不是种子-它被多次重用。演示:

代码语言:javascript
复制
def rand_tracker():
    rand_tracker.count += 1
    return random()
rand_tracker.count = 0
shuffle(v, random = rand_tracker)
print 'Random function was called %d times for length %d list.' % (rand_tracker.count, len(v))

它显示了:

代码语言:javascript
复制
Random function was called 999 times for length 1000 list.

你应该做的是@abarnert的建议:

代码语言:javascript
复制
from random import Random
Random(4).shuffle(x)

在这种情况下,固定的值是完全可以的。

abarnert TLDR:使用@的答案,不要对random使用固定值函数!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19306976

复制
相关文章

相似问题

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