Python如何在指定范围内生成每次大小不同且至少含3个元素的随机样本
Python 实现方案
实现逻辑如下:
- 引入官方标准库
random完成随机操作,无需额外安装第三方依赖 - 用集合存储可用的抽样长度,每次抽取后移除对应长度,确保每次抽样大小不重复
- 抽样长度默认限制为≥3且≤源列表总长度,可按需调整阈值
完整可运行代码:
import random def variable_size_sampler(population: list, min_sample_size: int = 3): # 计算所有合法的抽样长度 available_lengths = set(range(min_sample_size, len(population) + 1)) while available_lengths: # 随机选择未使用的长度 current_length = random.choice(list(available_lengths)) available_lengths.remove(current_length) # 无放回抽样,和示例效果一致;需要允许样本内重复元素可替换为random.choices yield random.sample(population, k=current_length) # 测试用例 if __name__ == "__main__": source_list = [1,2,3,4,5,6,7,8,9,10,11,12,13] # 初始化抽样器 sampler = variable_size_sampler(source_list) # 连续生成2个样本 print(next(sampler)) print(next(sampler))
运行效果示例:
第一次输出:[3, 4, 5, 9, 1, 2](长度为6)
第二次输出:[7, 9, 1, 4, 5, 6, 2](长度为7)
如果所有符合要求的抽样长度都被用完,迭代器会自动终止,不会抛出异常。如果需要自定义最小样本量,传入min_sample_size参数即可。
内容的提问来源于stack exchange,提问作者HRoark
相关产品推荐
相关产品推荐

