使用random.sample。
import random
list_a = [2, 3, 4, 5, 33, 42, 21]
list_b = [1, 11, 35, 48, 19]
a_index1, a_index2 = random.sample(range(len(list_a)), k=2)
b_index1, b_index2 = random.sample(range(len(list_b)), k=2)
list_a[a_index1], list_b[b_index1] = list_b[b_index1], list_a[a_index1]
list_a[a_index2], list_b[b_index2] = list_b[b_index2], list_a[a_index2]
这里唯一需要添加的就是把它放在一个循环中,循环200次。
random.sample 从可迭代对象中选择 k 唯一选项,因此不会出现在迭代中两次选择相同整数的情况。
如果您尝试对list_a 和list_b 使用相同的索引,您将永远无法替换list_a 中的最后两个元素,因为list_b 更短且没有等效索引。
编辑:
关于扩展这个问题:
目前,索引被解压缩为 2 个变量。当您更改为 k=5 时,您正试图将 5 个值的 list 解压缩为 2 个变量。
正确的解决方案是让它动态化。
import random
def swap(list_a, list_b, indexes_to_swap=2):
a_indexes = random.sample(range(len(list_a)), k=indexes_to_swap)
b_indexes = random.sample(range(len(list_b)), k=indexes_to_swap)
for a_index, b_index in zip(a_indexes, b_indexes):
list_a[a_index], list_b[b_index] = list_b[b_index], list_a[a_index]
list_a = [3,4,15,18,21,35,36,45,47]
list_b = [0,1,2,5,6,7,8,9,10,11,12,13,14,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,41,42,43,44,46,48]
swap(list_a, list_b, 5)
如果你想做 200 次:
for _ in range(200):
swap(list_a, list_b, 5)