如何随机替换列表元素与另一个列表元素?

时间:2017-09-11 14:10:37

标签: python list random replace

x_list = ['a', 'b', 'c', 'd', 'e']
t_list = ['z', 'y', 'u']

我希望将t_list的元素替换为x_list,"随机"的元素。我研究过并试过了一些东西,但replace()没有用于列表。例如; x_new0 = ['a', 'z', 'c', 'y', 'u]x_new1 = ['z', 'y', 'c', 'd','u']。我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

您可以使用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']

答案 1 :(得分:2)

您可以使用numpy.random.choice随机选择要在原始列表中进行替换的元素。然后zip针对您要用于替换的值的那些索引并应用替换。

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']

答案 2 :(得分:0)

您可以选择一个列表的随机索引和另一个列表的随机索引,并将索引值设为1并将其置于另一个列表的索引处。例如:

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)