如何改组数组以便所有元素都改变它们的位置?

时间:2016-04-05 08:47:23

标签: python-2.7

我需要对数组进行随机播放,以便所有数组元素都应该更改它们的位置。给定一个数组[0,1,2,3]可以得到[1,0,3,2]或[3,2,0,1]而不是[3,1,2,0]。< / p>

python中是否有任何功能可以执行此操作,或者我必须自己执行此操作?

1 个答案:

答案 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") )。