Python:洗牌列表,但保持一些元素冻结

我有这样的问题:

有一个类CAnswer的元素列表(不需要描述类),我需要洗牌,但是有一个约束 – 列表的某些元素的CAnswer.freeze设置为True,并且这些元素不能被洗牌,但仍然处于原来的位置。所以,让我们说一下给定的列表:

[a, b, c, d, e, f]

其中所有元素都是CAnswer的实例,但是c.freeze == True,而对于其他的则为freeze == False,可能的结果可能是:

[e, a, c, f, b, d]

所以索引2的元素仍然处于其位置。

实现它的最佳算法是什么?

先谢谢你 :)

另一个解决办法

# memorize position of fixed elements
fixed = [(pos, item) for (pos,item) in enumerate(items) if item.freeze]
# shuffle list
random.shuffle(items)
# swap fixed elements back to their original position
for pos, item in fixed:
    index = items.index(item)
    items[pos], items[index] = items[index], items[pos]
翻译自:https://stackoverflow.com/questions/12238005/python-shuffling-list-but-keeping-some-elements-frozen

转载注明原文:Python:洗牌列表,但保持一些元素冻结