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

基于numpy:生成与原列表等长、随机保留指定元素其余置0的列表方法

解决方案:生成符合规则的列表b

嘿,这问题用numpy的几个基础操作就能轻松实现,我给你拆解一下思路和代码:

核心思路是:先随机选出原数组中3个不重复的索引,然后创建一个和原数组长度相同的全0数组,最后把选中索引位置的值替换成原数组对应的值就搞定了。

完整实现代码

import numpy as np

# 原列表
a = [1, 4, 5, 7, 10]
# 转成numpy数组(方便后续高效操作)
a_np = np.array(a)
# 获取数组长度
len_a = len(a_np)

# 从0到len_a-1中无重复随机选3个索引
selected_indices = np.random.choice(len_a, size=3, replace=False)

# 创建全0数组,和原数组数据类型保持一致
b_np = np.zeros(len_a, dtype=a_np.dtype)
# 把选中索引位置的值替换为原数组对应的值
b_np[selected_indices] = a_np[selected_indices]

# 如果需要转回普通Python列表的话
b = b_np.tolist()

print(b)
# 示例输出可能是:[0, 4, 0, 7, 10](每次运行结果会随随机选择变化)

关键细节解释

  • np.random.choice(len_a, size=3, replace=False):这里replace=False是核心,保证选出来的索引不会重复;size=3指定了要保留的元素数量,完美匹配需求。
  • 用dtype=a_np.dtype指定全0数组的数据类型,避免出现原数组是整数、新数组却变成浮点数的问题。
  • 如果原列表长度小于等于3(比如原列表只有2个元素),代码也能正常运行——np.random.choice会自动选中所有元素,最终得到的b和原列表a完全一致,逻辑很严谨。

内容的提问来源于stack exchange,提问作者Василий Масов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:44