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

如何在for循环中从列表获取不重复随机值,避免prompt重复?

解决方案

核心思路

要避免同一Tag下的fintag重复,关键是按Tag维护一个动态的可用值池,每次分配后从对应池里移除已用值,后续同Tag的Name就不会抽到重复值,同时适配动态变化的列数。

修复后的代码实现

步骤1:预处理数据,构建Tag可用值池

先把字典数据转换成按Tag存储的可修改列表,避免每次循环重复读取原数据:

import pandas as pd
import random

# 读取CSV数据
people = pd.read_csv("people.csv")
dic = pd.read_csv("dic.csv")

# 为每个Tag创建独立的可用值列表副本(防止修改原数据)
tag_value_pool = {}
for tag in dic.columns:
    tag_value_pool[tag] = dic[tag].tolist().copy()

# 提取Name和Tag列表
names = people["Name"].tolist()
tags = people["Tag"].tolist()

步骤2:循环分配不重复的fintag

遍历每个Name和对应Tag,从可用池中随机取值并移除,确保同Tag值不重复:

with open("test.txt", "w", encoding="utf-8") as file:
    for name, tag in zip(names, tags):
        # 从当前Tag的可用池中随机选值
        selected_value = random.choice(tag_value_pool[tag])
        # 移除已选值,避免后续重复分配
        tag_value_pool[tag].remove(selected_value)
        # 构建并写入prompt
        prompt = f"{name} {selected_value}\n"
        print(prompt.strip())
        file.write(prompt)

关键说明

  • 无需为每个Tag单独定义变量,新增Tag时代码自动适配
  • 修复了原代码的两处错误:
    • 原代码中str(nam)错误地将整个Name列表转为字符串,改为当前循环的name变量
    • 原代码随机数范围计算错误,改用random.choice直接从列表选值更简洁
  • 同Tag下的取值绝对不会重复,完全符合需求

示例验证

用你提供的测试数据运行代码,会生成类似如下的输出(随机但同Tag值不重复):

mark red
bill shark
tim gloves
frank cat

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:54:09