如何打乱列表内的元素配对?适用于XGBoost任务
简洁化部分反转配对列表的实现
核心优化方案
针对你的需求(为XGBoost任务随机反转部分姓名配对的顺序),可以利用列表推导式结合更直观的概率判断来简化代码,同时提升效率:
import random # 输入示例 tlist = [['A1', 'B1'], ['A2', 'B2'], ['A3', 'B3'], ['A4', 'B4'], ['A5', 'B5'], ['A6', 'B6'], ['A7', 'B7'], ['A8', 'B8']] # 简洁实现:约1/3概率反转配对 tlist_rand = [pair[::-1] if random.random() < 1/3 else pair for pair in tlist]
关键改进点
- 更高效的反转操作:因为每个配对固定是2个元素,用
pair[::-1]直接反转比random.sample(pair, len(pair))更简洁高效 - 直观的概率控制:
random.random() < 1/3直接明确控制反转概率为1/3,替代原代码中通过随机数取模的间接判断 - 精简代码结构:列表推导式将循环和条件判断压缩为一行,减少冗余变量和重复赋值
兼容原逻辑的简化版本
如果需要完全匹配原代码中“每次判断都生成新随机数”的逻辑,也可以简化为:
import random tlist_rand = [] for pair in tlist: tlist_rand.append(pair[::-1] if random.randint(0, 1000) % 3 == 0 else pair)
这个版本去掉了重复的rand_number变量声明,直接在条件判断中生成随机数,消除冗余代码。
内容的提问来源于stack exchange,提问作者jndnd
相关产品推荐
相关产品推荐

