在Python中用一个数组中的值替换另一个数组中的值的百分比[重复]

vlju58qv  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(142)

此问题已在此处有答案

How to randomly replace a string in a list(7个回答)
昨天关门了。
假设我有两个唯一的数组:

a = [1,20,21, 67,4, 20, 90, 54,90, 78]
b= [3, 654, 342, 309, 245, 213, 984, 56, 89, 23]

如果我传递值“20%”,我想用数组b中相同索引的值随机替换数组a中20%的值。
输出:

a = [3, 20, 21, 67, 4, 20, 90, 54, 90, 23]

以下是我尝试过的:

a = [1,20,21, 67,4, 20, 90, 54,90, 78]
b= [3, 654, 342, 309, 245, 213, 984, 56, 89, 23]
percentage = 0.2
no_of_replaced_values = int(len(a)*percentage)
sl = slice(0, no_of_replaced_values)
a[0:no_of_replaced_values]=b[sl]
print(a)

这给出了a= [3, 654, 21, 67, 4, 20, 90, 54, 90, 78]的输出。我想随机更改它们,而不是连续更改值。

uemypmqf

uemypmqf1#

use random.sample可以用来从一个列表中给出n个随机索引。然后替换随机索引处的元素。

random.sample(range(0, len(a)), n)
# range(0, len(a)) -> list of indices of a [0, 1, 2 ... len(a)-1]
# n                -> number of elements from list
import random
a = [0, 0, 0, 0, 0, 0, 0, 0]
b = [1, 1, 1, 1, 1, 1, 1, 1]

def func(a, b, percentage):
    n = int(len(a)*percentage)
    inds = random.sample(range(0, len(a)), n)
    for i in inds:
        a[i] = b[i]
    return a

print(func(a[:], b[:], 0.20))
print(func(a[:], b[:], 0.20))
print(func(a[:], b[:], 0.50))

结果:

[0, 1, 0, 0, 0, 0, 0, 0]     # (20%) replaced 1 random element
[0, 0, 0, 0, 1, 0, 0, 0]     # (20%)
[1, 0, 1, 0, 0, 1, 1, 0]     # (50%) replace half the elements

相关问题