繁体   English   中英

随机替换列表中的项目

[英]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)

使用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个唯一选项,因此不会出现在迭代中两次选择相同 integer 的情况。

如果您尝试对list_alist_b使用相同的索引,您将永远不会替换list_b list_a短并且没有等效索引。

你几乎拥有它:

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)

这具有两个替代品永远不会相同的“好处”(您可能会问过?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM