所以我在Python中有一个包含4个字符串的列表,我希望返回该列表,但是随机化并且只能达到一个特定的数字(下面代码中的变量'players').我不能使用随机播放功能,但如果可以,请相信我,我愿意.
这是我到目前为止的代码:
players = raw_input('How many players? ')
players = int(players)
Roles = ["Role1", "Role2", "Role3", "Role4"]
print Roles[:players]
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式使用random.seed()函数随机化列表.我真的很困惑,因为我认为你只能使用random.seed()和数字,而不是字符串列表.如果有人可以帮助我,我会非常感激.
小智 10
虽然random.shuffle(或random.sample)是Python方式,但如果它确实不是一个选项,请考虑使用现有的众所周知的方法.下面的代码是Fisher-Yates Shuffle的一个实现(它改编自该页面上的Sattolo变体代码):
from random import randrange
def shuffle(items): # mutates input list
i = len(items)
while i > 1:
j = randrange(i) # 0 <= j <= i
items[j], items[i] = items[i], items[j]
i = i - 1
return
Run Code Online (Sandbox Code Playgroud)
有时看到浮动的另一种方法是用一系列随机数压缩列表,基于随机数排序,然后提取原始值.
from random import random
def shuffle(items): # returns new list
return [t[1] for t in
sorted((random(), i) for i in items)]
Run Code Online (Sandbox Code Playgroud)
在任何情况下,random.seed仅仅为所使用的PRNG(伪随机数发生器)设置种子.也就是说,将影响生成的未来随机数(以及利用它们的函数),但本身不会"获得"随机值或"随机"或"随机化"任何内容.(如果不调用它通常会很好,因为有一个合适的"默认种子"设置,但有时它很好 - 例如在测试或纸牌游戏中的重复性 - 设置一个特定的种子.)random.seed
例如,试试这个:(如果使用Python 2.x,从中删除括号print):
from random import seed, random
# should all be the same value, whatever that is.
seed(1)
print(random())
seed(1)
print(random())
seed(1)
print(random())
# should be two different values (and different from above)
print(random())
print(random())
# should be same as first three values
seed(1)
print(random())
Run Code Online (Sandbox Code Playgroud)
要理解的关键是PSEUDO RANDOM源(PRNG)采用CURRENT内部状态 - 可以使用"种子"设置,尽管现代PRNG具有更大的内部状态 - 并使用它来生成随机值和 NEXT内部国家.甲真正的随机源不具有"种子"的概念(例如,该样品的静态噪声特种硬件).
快乐的编码.