【发布时间】:2013-03-19 22:51:53
【问题描述】:
我想对列表进行随机洗牌,但有一个条件:洗牌后元素永远不能位于相同的原始位置。
在 python 中是否有一种单行方式可以为列表执行此操作?
例子:
list_ex = [1,2,3]
以下每个混洗后的列表在混洗后被采样的概率应该相同:
list_ex_shuffled = [2,3,1]
list_ex_shuffled = [3,1,2]
但是排列 [1,2,3]、[1,3,2]、[2,1,3] 和 [3,2,1] 是不允许的,因为它们都重复元素位置之一.
注意:list_ex 中的每个元素都是唯一的 id。不允许重复相同的元素。
有什么想法吗?谢谢!
【问题讨论】:
-
当您的列表包含多个彼此相等的项目时,您会期待什么。例如,当列表为
[2, 2, 2]时,您希望发生什么? -
结合使用deque 及其
rotate方法可以产生预期的结果。但是,在某些情况下,如上述评论中,您没有明确定义预期结果。 -
@crayzeewulf 好点!我的数据结构永远不会遇到这种情况,谢谢!
-
@sean,你介意给我更多细节吗,听起来不错,谢谢!