【发布时间】:2014-10-01 17:45:30
【问题描述】:
如何随机打乱一个列表,以使所有元素都不会保留在其原始位置?
换句话说,给定一个具有不同元素的列表A,我想生成一个排列B,以便
- 这个排列是随机的
- 对于每个
n、a[n] != b[n]
例如
a = [1,2,3,4]
b = [4,1,2,3] # good
b = [4,2,1,3] # good
a = [1,2,3,4]
x = [2,4,3,1] # bad
我不知道这种排列的正确术语(它是“全部”吗?)因此很难在谷歌上搜索。正确的术语似乎是“混乱”。
【问题讨论】:
-
我会注意到这不是一个“完全”随机的随机播放。
-
在 stackoverflow 上有一个类似的问题 -> stackoverflow.com/questions/7279895/… 但回答者说:
My algorithm is actually bad: you still have a chance of ending with the last point unshuffled.希望这可以帮助您指出正确的方向。 -
@J0HN:我已经编辑了示例以明确这一点。
-
[1,1,2,3]怎么样?只有索引需要“完全”打乱,还是算法也应该查看值? -
@OllieFord:我的意思是,算法应该随机生成“好的”排列之一。
标签: python random permutation