Python: 如何随机混合两个列表?
Python: How do I randomly mix two lists?
如果我生成两个随机列表,例如:
N=5
X=20
parent1 = np.random.choice(X, N, replace=True)
parent2 = np.random.choice(X, N, replace=True)
会给出两个列表,例如:
[2,5,1,1,12]
[3,18,4,5,1]
我怎样才能创建一个新列表,它是两个具有相同数量数字的列表的随机组合?
例如
[2,18,1,5,12]
或
[18,5,1,12,5]
顺序无关紧要
从 2 个列表中进行均匀随机选择的几种方法。
- 随机选择列表中的0或1,然后在列表中随机选择。
- 随机数直到列表的总和,然后根据该数字从第一个或第二个列表中逻辑选择。
.
import random
#### Option 1
for i in range(len(parent1)):
list_number = random.randint(1,3)
output(i) = exec('np.random.choice(parent'+str(list_number)+')')
#### Option 2
output_list = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
前者在输出中平等地表示每个列表,而不管它们的相对长度,后者根据列表的相对长度进行采样。
继续你的例子,你可以简单地试试这个:
result = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
是否进行替换采样由您选择(参数replace
)。
如果给你 parent1
和 parent2
,你可以使用 np.choose
:
which_one = np.random.int(2, size=N).astype(np.bool)
out_array = np.choose(which_one, [parent1, parent2])
但是,请记住,如果 parent1
和 parent2
在您的代码中都是随机的,那么您可以简单地执行
out_array = np.random.choice(X, N, replace=True)
一种方法是:
N=5
select_one = np.random.randint(0,2,N) # Outputs an array of 1 or 0s
mixed_list = select_one*parent1 + (1 - select_one)*parent2
如果你也想随机排列列表元素,你可以使用:
mixed_list = np.random.permutation(rand_fact*parent1 + (1 - rand_fact)*parent2)
如果我生成两个随机列表,例如:
N=5
X=20
parent1 = np.random.choice(X, N, replace=True)
parent2 = np.random.choice(X, N, replace=True)
会给出两个列表,例如:
[2,5,1,1,12]
[3,18,4,5,1]
我怎样才能创建一个新列表,它是两个具有相同数量数字的列表的随机组合?
例如
[2,18,1,5,12]
或
[18,5,1,12,5]
顺序无关紧要
从 2 个列表中进行均匀随机选择的几种方法。
- 随机选择列表中的0或1,然后在列表中随机选择。
- 随机数直到列表的总和,然后根据该数字从第一个或第二个列表中逻辑选择。
.
import random
#### Option 1
for i in range(len(parent1)):
list_number = random.randint(1,3)
output(i) = exec('np.random.choice(parent'+str(list_number)+')')
#### Option 2
output_list = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
前者在输出中平等地表示每个列表,而不管它们的相对长度,后者根据列表的相对长度进行采样。
继续你的例子,你可以简单地试试这个:
result = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
是否进行替换采样由您选择(参数replace
)。
如果给你 parent1
和 parent2
,你可以使用 np.choose
:
which_one = np.random.int(2, size=N).astype(np.bool)
out_array = np.choose(which_one, [parent1, parent2])
但是,请记住,如果 parent1
和 parent2
在您的代码中都是随机的,那么您可以简单地执行
out_array = np.random.choice(X, N, replace=True)
一种方法是:
N=5
select_one = np.random.randint(0,2,N) # Outputs an array of 1 or 0s
mixed_list = select_one*parent1 + (1 - select_one)*parent2
如果你也想随机排列列表元素,你可以使用:
mixed_list = np.random.permutation(rand_fact*parent1 + (1 - rand_fact)*parent2)