Python用random模块生成带约束的无重复随机嵌套列表
实现方法
核心用Python标准库random模块的sample方法即可,该方法天生支持无重复随机抽样,完全匹配需求。
规则对应
- 并行遍历两个配置列表,按索引一一匹配「子列表元素个数」和「子列表元素最大值」的约束
- 每个子列表的可选值范围是*1到对应最大值(包含两端)*的整数
- 无重复抽样直接通过
random.sample实现,不需要手动写去重逻辑
完整可运行代码
import random a = [[10], [8], [4]] # 配置:对应位置子列表的元素个数 b = [[15], [10], [5]] # 配置:对应位置子列表允许的最大元素值 new_list = [] for count_item, max_item in zip(a, b): elem_num = count_item[0] upper_limit = max_item[0] # 合法性校验:避免要求的元素数超过可选值总数导致运行错误 if elem_num > upper_limit: raise ValueError(f"位置{len(new_list)}的子列表要求{elem_num}个不重复元素,但最大取值仅为{upper_limit},无法生成") # 从1到upper_limit的整数中随机抽取elem_num个不重复值 sub_list = random.sample(range(1, upper_limit + 1), elem_num) new_list.append(sub_list) print(new_list)
运行效果
多次运行代码会生成符合要求的随机结果,例如:
- 输出1:
[[1, 3, 4, 7, 8, 9, 10, 12, 13, 15], [2, 3, 4, 5, 6, 7, 9, 10], [1, 2, 4, 5]] - 输出2:
[[2, 5, 6, 8, 9, 11, 12, 13, 14, 15], [1, 3, 4, 5, 6, 7, 8, 10], [2, 3, 4, 5]]
和题目给出的示例格式、约束完全一致。
内容的提问来源于stack exchange,提问作者Alan Jones
相关产品推荐
相关产品推荐

