Python:改组列表,但保持某些元素冻结
问题内容:
我有一个问题:
有一个class元素的列表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]