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

如何实现满足非连续类别约束的多类别实验词汇随机排列?

解决方案

核心逻辑

每次从非上一个类别的剩余词汇中随机选取下一个词,直到所有词汇都被选入序列。这个逻辑简单易懂,不会出现死循环或不符合要求的情况。

Python 实现代码

import random

# 定义类别与对应词汇(可直接替换成你实际的词汇)
category_words = {
    1: ['a', 'b', 'c', 'd'],
    2: ['a', 'b', 'c', 'd'],
    3: ['a', 'b', 'c', 'd'],
    4: ['a', 'b', 'c', 'd']
}

# 复制一份数据用于跟踪剩余词汇,避免修改原始数据
remaining = {cat: words.copy() for cat, words in category_words.items()}
sequence = []
last_used_category = None

# 生成符合要求的序列
while any(len(words) > 0 for words in remaining.values()):
    # 筛选出可选类别:排除上一个使用的类别,且该类别还有剩余词汇
    available_categories = [
        cat for cat in remaining 
        if cat != last_used_category and len(remaining[cat]) > 0
    ]
    # 随机选一个类别
    selected_cat = random.choice(available_categories)
    # 从该类别随机选一个词汇
    selected_word = random.choice(remaining[selected_cat])
    # 加入序列并从剩余列表移除该词汇
    sequence.append(selected_word)
    remaining[selected_cat].remove(selected_word)
    # 更新上一个使用的类别
    last_used_category = selected_cat

# 输出结果
print(sequence)

关键说明

  • remaining字典用于记录每个类别还未使用的词汇,避免重复选取
  • 每次筛选可选类别时,自动排除上一个使用的类别,确保连续词汇类别不同
  • 循环会自动执行到所有16个词汇都被选完,不会出现无法继续的情况(因为4个类别数量相同,永远不会只剩单一类别的词汇)
  • 如果需要直观验证类别是否符合要求,可以把词汇改成(类别编号, 词汇)的形式,比如(1, 'a'),输出时能直接看到类别信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:14