随机替换列表中的项目
randomly replace item in list
我有两个列表 A =[2,3,4,5,33,42,21]
和 B = [1,11,35,48,19]
我想随机删除列表 B
的两个项目并替换为列表 A
中的两个随机项目进行 200 次迭代.我使用了这段代码,但只有一项 B
替换为 A
。我该怎么做?
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
x = random.randrange(0,5)
i = A[x]
A[x] = B[x]
B[x] = i
print(A)
print(B)
你几乎成功了:
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
for _ in range(400):
x = random.randrange(0,5)
A[x], B[x] = B[x], A[x]
print(A)
print(B)
您想循环 400 次,因为每次迭代要更改 2 个项目,并且要循环 200 次。你也可以这样做:
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
for _ in range(200):
x = random.randrange(0,5)
y = random.randrange(0,5)
while y == x:
y = random.randrange(0,5)
A[x], B[x] = B[x], A[x]
A[y], B[y] = B[y], A[y]
print(A)
print(B)
这有一个“好处”,即 2 个替代品永远不会相同(您可能已经问过?)
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)
我有两个列表 A =[2,3,4,5,33,42,21]
和 B = [1,11,35,48,19]
我想随机删除列表 B
的两个项目并替换为列表 A
中的两个随机项目进行 200 次迭代.我使用了这段代码,但只有一项 B
替换为 A
。我该怎么做?
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
x = random.randrange(0,5)
i = A[x]
A[x] = B[x]
B[x] = i
print(A)
print(B)
你几乎成功了:
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
for _ in range(400):
x = random.randrange(0,5)
A[x], B[x] = B[x], A[x]
print(A)
print(B)
您想循环 400 次,因为每次迭代要更改 2 个项目,并且要循环 200 次。你也可以这样做:
import random
A = [2,3,4,5,33,42,21]
B = [1,11,35,48,19]
for _ in range(200):
x = random.randrange(0,5)
y = random.randrange(0,5)
while y == x:
y = random.randrange(0,5)
A[x], B[x] = B[x], A[x]
A[y], B[y] = B[y], A[y]
print(A)
print(B)
这有一个“好处”,即 2 个替代品永远不会相同(您可能已经问过?)
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)