如何将随机值从一个元素转移到另一个?

时间:2018-08-01 10:44:12

标签: python

我想创建一个包含10,000个元素的列表,每个元素都将一个值传输到另一个随机选择的元素,并重复100,000次(或更多)。可以分配转移值的分布(例如,正态或对数正态等)。

我能想到的是使用循环并分配另一个列表来保存传输值。

考虑运行时间可能很长,有没有办法有效地完成此操作?

例如: 1.初始状态:

x = [5, 5, 5, 5, 5]

2。所有元素随机减少一个数字:

x = [4, 3, 4, 1, 2]

3。我将创建另一个列表x2,以保存更改,该值将在x中随机分配给元素(但不是该值来自的确切元素,例如x2 [0]永远不会分配给x [0]) :

x2 = [1, 2, 1, 4, 3]

4。最终我可能会得到:

x = [7, 7, 7, 2, 2]

x2[1]x2[2]已添加到x[0]x2[3]x[1]x2[4]x[2],{{1} }到x2[0]x[3]却什么也没有发生(这是一个示例,因为所有事物都是随机的)。

我的当前代码如下所示,具有固定值,在选择过程中不能排除x [i]。

x[4]

1 个答案:

答案 0 :(得分:0)

希望我已经正确理解了算法。该解释在代码的注释中:

import random

# initial state
x = [5, 5, 5, 5, 5]
print('step 1:\tx =\t', x)

# decrease each element by random number = create list x2
x2 = [random.randint(1, 3) for _ in range(len(x))]
print('step 2:\tx2 =\t', x2)
x = [vx - vx2 for vx, vx2 in zip(x, x2)]
print('step 3:\tx =\t', x)

while x2:
    # pop element from x2
    v = x2.pop()
    # apply this element to random value in list x
    x[random.randint(0, len(x)-1)] += v

# print final value of list x
print('step 4:\tx =\t', x)

打印(例如):

step 1: x =  [5, 5, 5, 5, 5]
step 2: x2 = [1, 1, 1, 3, 2]
step 3: x =  [4, 4, 4, 2, 3]
step 4: x =  [5, 4, 4, 8, 4]