这样做很有用 -- 与 random.shuffle()
不同,它返回列表的一个新副本。
import random
def shuffle_some(source, shuffle_indices):
to_shuffle = [source[i] for i in shuffle_indices]
random.shuffle(to_shuffle)
shuffled = source[:]
for i, source_index in enumerate(shuffle_indices):
shuffled[source_index] = to_shuffle[i]
return shuffled
s = ["Apple", "Banana", "Coconut", "Durian", "Elderberry", "Fig", "Guava"]
for x in range(5):
print(shuffle_some(s, (0, 3, 4)))
输出结果如下:
['Elderberry', 'Banana', 'Coconut', 'Apple', 'Durian', 'Fig', 'Guava']
['Durian', 'Banana', 'Coconut', 'Apple', 'Elderberry', 'Fig', 'Guava']
['Apple', 'Banana', 'Coconut', 'Durian', 'Elderberry', 'Fig', 'Guava']
['Apple', 'Banana', 'Coconut', 'Durian', 'Elderberry', 'Fig', 'Guava']
['Apple', 'Banana', 'Coconut', 'Elderberry', 'Durian', 'Fig', 'Guava']