好的,我有一个问题。我正在创建一个脚本,从提供的名称列表中抓取一个随机名称,并在5的列表中生成它们。我知道你可以使用命令
items = ['names','go','here']
rand_item = items[random.randrange(len(items))]
如果我没记错的话,应该从列表中抓取一个随机项。虽然如果我错了,但我的问题是如何让它产生,比如5个名字的列表,如下所示;
random
names
generated
using
code
还有一种方法可以让它连续5天运行,它不会以相同的顺序重复这些名称吗?
感谢您提供的任何帮助,或我现有代码中的任何错误。
编辑: 我的脚本的一般用途是每周5天,每天为一组用户生成任务分配。我正在寻找的是一种以5种不同的旋转方式生成这些名称的方法。
我为任何困惑道歉。虽然一些返回的答案会有所帮助。
EDIT2: 好吧所以我认为我主要是我想要的,谢谢Markus Meskanen& mescalinum,我使用了你们两个人的一些代码解决了这个问题的大部分内容。我非常感激。以下是我现在使用的代码。
import random
items = ['items', 'go', 'in', 'this', 'string']
rand_item = random.sample(items, 5)
for item in random.sample(items, 5):
print item
答案 0 :(得分:3)
您可以使用random.choice()
仅获取一件商品:
items = ['names','go','here']
rand_item = random.choice(items)
现在重复这5次(for循环!)
如果您希望名称只是随机顺序,请每次使用random.shuffle()
获得不同的结果。
答案 1 :(得分:3)
random.choice()
适合随意选择元素。
但是,如果您想随意选择多个元素而不重复,可以使用random.sample()
:
for item in random.sample(items, 5):
print item
对于最后一个问题,您应该相信(伪)随机生成器不会连续两天给出相同的序列。随机种子默认使用当前时间进行初始化,因此连续两天不太可能观察到相同的序列,尽管不是不可能的,特别是如果项目数量很少的话。
如果您绝对需要避免这种情况,请将最后一个序列保存到文件中,然后在随机播放之前加载它,并保持随机播放,直到它为您提供不同的顺序。
答案 2 :(得分:0)
Shows
将处理随机订单生成
random.shuffle(items)
为完整起见,我同意In [15]: print items
['names', 'go', 'here']
In [16]: for item in items: print item
names
go
here
In [17]: random.shuffle(items)
In [18]: for item in items: print item
here
names
go
上的上述海报。
答案 3 :(得分:0)
您的问题中不清楚您是否只是想要随机播放这些项目或选择一个子集。从我的意义上说,你想要第二种情况。
您可以使用random.sample
从python中的列表中获取给定数量的随机项。如果我想从五个字母的列表中随机获取3个项目,我会这样做:
>>> import random
>>> random.sample(['a', 'b', 'c', 'd', 'e'], 3)
['b', 'a', 'e']
请注意,这些字母不一定以相同的顺序返回 - 'b'
之前返回'a'
,尽管原始列表中并非如此。
关于问题的第二部分,阻止它生成 在相同的顺序中,您可以将每个新生成的子列表附加到文件中,在脚本执行期间检索此文件并生成新的子列表,直到它与每个过去生成的子列表不同。