如何用Python生成n个带随机种子可复现的列表随机洗牌结果
实现方案
直接使用Python标准库random模块即可实现,核心是用独立的随机数生成器实例保证结果可复现,同时不污染全局随机状态:
import random from typing import List, Any def f(lst: List[Any], samples: int = 2, seed: int = 1234) -> List[List[Any]]: # 初始化独立的随机数生成器,不影响全局random状态 rng = random.Random(seed) res = [] for _ in range(samples): # 每次洗牌都复制原列表,避免修改原列表和之前的洗牌结果 shuffled = lst.copy() rng.shuffle(shuffled) res.append(shuffled) return res
测试验证
你的测试用例运行结果和给出的示例完全一致:
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] result = f(lst, samples=2, seed=1234) for item in result: print(item)
输出:
[5, 7, 1, 6, 2, 8, 0, 4, 3, 9] [8, 7, 3, 0, 1, 4, 5, 9, 6, 2]
特性说明
- 可复现性:只要
seed参数相同,无论调用多少次函数,返回的洗牌结果集合完全一致 - 无副作用:使用独立的随机数生成器实例,不会影响代码其他位置对
random模块的调用;每次洗牌都操作原列表的副本,不会修改传入的原始列表 - 通用性:支持任意元素类型的列表,不限制只能处理数值列表
内容的提问来源于stack exchange,提问作者user2743931
相关产品推荐
相关产品推荐

