如何随机选取列表中非零元素替换为0,使剩余非零元素数量为5个?
解决方法
核心思路
- 先筛选出列表中所有非零元素的索引
- 算出需要置零的非零元素数量:
现有非零元素总数 - 5 - 从非零索引中随机抽取对应数量的索引,将对应位置的值改为0即可
Python 实现代码
import random A = [0, 1, 2, 3, 4, 5, 0, 6, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0] # 提取所有非零元素的索引 non_zero_idx = [i for i, val in enumerate(A) if val != 0] # 计算需要置零的非零元素数量 need_remove = len(non_zero_idx) - 5 if need_remove > 0: # 随机选择要置零的索引 remove_idx = random.sample(non_zero_idx, need_remove) for i in remove_idx: A[i] = 0 print(A)
效果说明
原列表共有8个非零元素,运行代码后会随机将其中3个非零元素置为0,最终列表仅剩5个非零元素,每次运行结果都不相同,符合随机选取的要求。
内容的提问来源于stack exchange,提问作者czy
相关产品推荐
相关产品推荐

