我需要对数组进行随机播放,以便所有数组元素都应该更改它们的位置。给定一个数组[0,1,2,3]可以得到[1,0,3,2]或[3,2,0,1]而不是[3,1,2,0]。< / p>
python中是否有任何功能可以执行此操作,或者我必须自己执行此操作?
答案 0 :(得分:1)
我能想到的最简单的解决方案是使用while not allDifferent(v):
random.shuffle(v)
来混洗并检查结果,直到所有元素都位于不同的位置:
for i in range(0, len(a)-1):
pick = random.randint(i+1, len(a)-1)
a[i], a[pick] = a[pick], a[i]
这样做的风险当然是您可能需要多次尝试,但这不是一个很大的问题。在对此进行一些测试之后,在所有元素处于不同位置之前的平均尝试次数对于列表长度为3约为3.对于列表长度为5的2.7,然后对于更长的列表似乎保持在2.7左右(尝试长度1000)。
依靠这样的概率有点不确定,但对于大多数应用程序,你应该没问题。
编辑:现在,如果你想更快地选择某些东西,你可能必须自己做。像这样:
i+1
那个人会将数组洗牌,这样就不会有任何数字和以前一样在同一个地方(因为annotate("text", x = 4, y = 25, label = "This should be bold",
colour = "red", fontface =2)+
annotate("text", x = 4, y = 24, label = "and this not",
colour = "red")
)。