You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成多组加权随机属性集合时如何确保没有重复值

问题分析与代码调整方案

你的代码存在两个需要修正的核心问题:

  • 代码笔误:attCone1、attColor1、attAcces1、attShadow1生成时,choices的第一个参数都错误写成了attEyes,会导致这几个属性实际都是按眼睛的权重生成,不符合预期。
  • 缺少去重逻辑:直接循环100次生成并打印,没有校验当前生成的属性集合是否和历史生成的重复。

调整后可实现去重的代码

from random import choices

# 统一配置各属性的可选值和对应权重,减少冗余代码
attr_config = [
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.3, 0.25]),  # 头发属性
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.5, 0.25]),  # 眼睛属性
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.5, 0.25]),  # attCone属性
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.5, 0.25]),  # 颜色属性
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.5, 0.25]),  # 配饰属性
    ([1,2,3,4,5,6], [0.3, 0.2, 0.05, 0.15, 0.5, 0.25]),  # 阴影属性
]

target_num = 100  # 需要生成的不重复属性组数量
generated_set = set()  # 存储已生成的属性组合用于去重校验
final_result = []  # 存储最终的有效不重复结果

while len(final_result) < target_num:
    current_attr = []
    for val_list, weight_list in attr_config:
        # choices返回列表,取第一个元素拼接为当前属性组
        current_attr.append(choices(val_list, weights=weight_list)[0])
    # 列表不可哈希,转元组后存入集合做去重校验
    current_tuple = tuple(current_attr)
    if current_tuple not in generated_set:
        generated_set.add(current_tuple)
        final_result.append(current_attr)
        # 生成有效不重复条目时打印,也可后续统一处理final_result
        print(current_attr)

后续如果需要修改任意属性的可选值、权重,只需要调整attr_config里对应位置的配置即可,不用重复编写多段生成逻辑。

内容的提问来源于stack exchange,提问作者Yorowne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:54:04