You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.5中random.choice存储值二次调用后被覆盖问题求助

解决随机选择值被覆盖的问题

看起来你遇到的问题主要有两个:一是变量引用导致的数组共享,二是如果要存储多次随机选择结果,需要正确生成独立的存储数组。我来一步步帮你解决:

首先分析你的代码问题

你写的masschoice = achoice是典型的numpy数组引用赋值——这时候masschoice和achoice指向的是同一个数组对象,后续任何对其中一个的修改都会同步到另一个,这可不是你想要的“分别存储不同数组的随机值”。

另外,如果你想用random.choice()存储多次选择的结果,直接赋值单个值会覆盖之前的内容,需要循环填充或者用更高效的numpy原生随机函数。

解决方案分两种场景

场景1:只需要从每个数组选一个值(单次选择)

如果只是每次从三个数组各取一个随机值,不需要存储多次结果,直接单独赋值就行,根本不需要数组:

import numpy as np
import random

a_onc = np.array([1,2,3,4,5])
mass_onc = np.array([10,11,12,13,14,15])
age_onc = np.array([23,24,25,21,22,27])

# 每个变量单独存储一个随机值,互不干扰
achoice = random.choice(a_onc)
masschoice = random.choice(mass_onc)
agechoice = random.choice(age_onc)

场景2:需要存储多次随机选择的结果(比如选2次)

如果你想保存多组随机值,推荐用numpy自带的np.random.choice(),它可以直接指定生成的样本数量,而且效率更高:

import numpy as np

a_onc = np.array([1,2,3,4,5])
mass_onc = np.array([10,11,12,13,14,15])
age_onc = np.array([23,24,25,21,22,27])

# 定义要生成的样本数量
num_samples = 2

# 每个数组独立生成指定数量的随机选择结果
achoice = np.random.choice(a_onc, size=num_samples)
masschoice = np.random.choice(mass_onc, size=num_samples)
agechoice = np.random.choice(age_onc, size=num_samples)

这样achoice就是一个长度为2的数组,每个元素都是从a_onc里随机选的,三个数组完全独立,不会互相覆盖。

如果你坚持要用标准库的random.choice(),那需要循环填充每个数组,并且要确保每个存储数组是独立创建的:

import numpy as np
import random

a_onc = np.array([1,2,3,4,5])
mass_onc = np.array([10,11,12,13,14,15])
age_onc = np.array([23,24,25,21,22,27])

num_samples = 2
# 每个存储数组单独创建,不要用赋值引用
achoice = np.zeros(num_samples)
masschoice = np.zeros(num_samples)
agechoice = np.zeros(num_samples)

# 循环填充每个位置的随机值
for i in range(num_samples):
    achoice[i] = random.choice(a_onc)
    masschoice[i] = random.choice(mass_onc)
    agechoice[i] = random.choice(age_onc)

关键提醒

numpy数组是可变对象,直接用=赋值是传递引用,不是复制数组。如果想复制数组,你可以用masschoice = achoice.copy(),但在你的场景里,直接创建新的空数组更合理。

内容的提问来源于stack exchange,提问作者Rob S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:05:18