问题描述
|
假设我有
mychoice = random.choice([\'this is random response 1\',\'this is random response 2\',\'this is random response 3\',\'and 4\',\'and so on\'])
如何避免同一选择连续重复多次?或我如何设置条件以使某个特定选择仅在选择了某些其他选择之后才会出现?还是在这方面有一个更适合我需要的模块?
解决方法
最简单的解决方案可能是构造一个长度为
k
的usedQueue
(其中k是允许重复选择之前的选择数。)选择一个选项时,将其从原始列表中删除并将其放在usedQueue
中。然后,如果是ѭ4pop,则将其弹出回到阵列中。
如前所述,这大大降低了算法的随机性。也就是说,它确实有实际用途(请查看iTunes)。
, 示例实现,确保两次出现同一项目之间的最小距离:
def choice_gen(choices,min_dist):
last_choices = collections.deque(maxlen=min_dist)
choices = set(choices)
while 1:
c = random.choice(list(choices - set(last_choices)))
last_choices.append(c)
yield c
, 此例程从mylist中选择并打印随机选择,而不进行替换,直到用尽所有选择。
index = range(len(mylist))
while len(index) > 0:
i = random.choice(index)
print mylist[i]
index.pop(i)