x_list = ['a', 'b', 'c', 'd', 'e']
t_list = ['z', 'y', 'u']
我想用x_list
的元素随机替换t_list
的元素。我进行了一些研究并尝试了一些方法,但是对于列表来说,replace()
无法正常工作。例如:x_new0 = ['a', 'z', 'c', 'y', 'u]
,x_new1 = ['z', 'y', 'c', 'd','u']
。我该如何做到这一点?
random
模块并使用random.randint()
方法生成介于1和100之间的随机数作为正反面硬币投掷来决定是否替换值,然后在第二个列表上使用random.choice()
方法返回列表的一个随机元素。import random
first = ['a', 'b', 'c', 'd', 'e']
second = ['z', 'y', 'u']
print(first)
for index, x in enumerate(first):
if random.randint(0, 1):
first[index] = random.choice(second)
print(first)
First run stdout:
>> ['a', 'b', 'c', 'd', 'e']
>> ['y', 'z', 'u', 'y', 'y']
Second run stdout:
>> ['a', 'b', 'c', 'd', 'e']
>> ['a', 'u', 'c', 'u', 'y']
random.choice([0, 1])
(或 True/False) 而非 random.randint(0,100)>50
的任何理由吗? - Jon Clements您可以使用numpy.random.choice
来随机选择元素,以指定原始列表中要进行替换的位置。然后将这些索引与想要用于替换的值一起压缩,并应用替换。
from numpy.random import choice
def swap_elements(x, t):
new_x = x[:]
for idx, value in zip(choice(range(len(x)), size=len(t), replace=False), t_list):
new_x[idx] = value
return new_x
示例用法
>>> x_list = ['a', 'b', 'c', 'd', 'e']
>>> t_list = ['z', 'y', 'u']
>>> swap_elements(x_list, t_list)
['y', 'u', 'z', 'd', 'e']
>>> swap_elements(x_list, t_list)
['y', 'b', 'z', 'u', 'e']
>>> swap_elements(x_list, t_list)
['y', 'b', 'z', 'u', 'e']
>>> swap_elements(x_list, t_list)
['a', 'u', 'z', 'y', 'e']
from random import randint
a = [1 ,2, 3, 4]
b = [5, 6, 7, 8]
RandomIndexA = randint(0, len(a) - 1)
RandomIndexB = randint(0, len(b) - 1)
a[RandomIndexA] = b[RandomIndexB]
或者,您可以仅计算一个随机索引,然后使用random.choice(b)
从另一个列表中随机选择一个元素,例如:
from random import randint, choice
a = [1 ,2, 3, 4]
b = [5, 6, 7, 8]
RandomIndex = randint(0, len(a) - 1)
a[RandomIndex] = choice(b)
x_list[2] = t_list[0]
。 - nost_list
的所有元素,以及b) 这些元素按顺序排列吗? - David Robinsonx_list
中有另一个a
并被替换为z
,那么所有的值都会被替换为z
吗?如果两个列表的长度相同,直接替换是正确的答案吗?如果x
中的元素比t
少怎么办...t
的元素是否必须按顺序出现在x
中...等等? - Jon Clements