我在Python中有一个类似如下的列表:
["Apple", "Banana", "Coconut", "Durian", "Elderberry", "Fig", "Guava"]
我的目标是打乱列表,以便某些元素被打乱,而其他元素则留在原来的地方。
例如,如果要对第0、1、2、4和6个元素进行混洗,则混洗的可能结果为:
["Elderberry", "Banana", "Apple", "Durian", "Guava", "Fig", "Coconut"]
我该怎么做呢?random.shuffle似乎只支持单个对象/切片。单独对每个切片进行混洗只会在每个切片之间进行混洗,而不是在所有切片之间进行。
发布于 2020-12-19 01:42:04
下面这样简单的代码就可以解决这个问题了:
from random import shuffle
def funct(all_elem, indices):
to_shuffel = all_elem.copy()
for index in sorted(indices, reverse=True):
del to_shuffel[index]
shuffle(to_shuffel)
for index in indices: # Add the static elements to the shuffled list, accordingly.
to_shuffel.insert(index, all_elem[index])
return to_shuffel
创建一个接收要混洗的列表的函数,以及一组索引,这些索引将告诉您列表的哪一部分应该保持不变。创建一个包含可以随机排列的元素的列表,对它们进行随机排列,最后将fix元素插入到新的随机排列列表上的正确索引中。
适用于:
list = ["Apple", "Banana", "Coconut", "Durian", "Elderberry", "Fig", "Guava"]
print(funct(list, (0, 1)))
输出:
['Apple', 'Banana', 'Fig', 'Elderberry', 'Durian', 'Coconut', 'Guava']
https://stackoverflow.com/questions/65361245
复制相似问题