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

如何按规则从alt与runs两组列表生成所有英文短语?

解决方案

核心思路

先按每个元素类型确定对应位置的可选值,再生成所有合法组合,最后过滤并拼接成短语:

  1. 对每个位置,根据alt类型定义可选内容:
    • constant:只能保留对应runs元素(必须包含)
    • variable:只能忽略(对应空值)
    • article/o-constant:可选择保留或忽略对应runs元素
    • verb:可选择保留单个对应runs元素,或全不保留
  2. 生成所有可能的组合(笛卡尔积),过滤掉包含多个verb的非法组合
  3. 过滤每个组合中的空值,按原顺序拼接成短语

代码实现(Python)

import itertools

def generate_phrases(alt, runs):
    # 为每个位置生成可选值列表
    options = []
    verb_indices = []
    for idx, (a, r) in enumerate(zip(alt, runs)):
        if a == "constant":
            options.append([r])
        elif a == "variable":
            options.append([""])
        elif a in ["article", "o-constant"]:
            options.append(["", r])
        elif a == "verb":
            options.append(["", r])
            verb_indices.append(idx)
    
    phrases = []
    # 生成所有可能的组合
    for combo in itertools.product(*options):
        # 检查verb规则:最多一个非空的verb
        verb_count = 0
        for idx in verb_indices:
            if combo[idx] != "":
                verb_count += 1
                if verb_count > 1:
                    break
        if verb_count > 1:
            continue
        
        # 过滤空值,拼接成短语
        phrase_parts = [part for part in combo if part != ""]
        if phrase_parts:  # 避免空短语(因为至少有constant)
            phrases.append(" ".join(phrase_parts))
    
    # 去重(如果有重复组合)并返回
    return list(set(phrases))

# 示例测试
alt = ["constant", "variable", "constant", "o-constant"]
runs = ["fix", "something", "for", "a meal"]
result = generate_phrases(alt, runs)
for p in result:
    print(p)

代码解释

  1. 选项定义:遍历alt和runs的配对,为每个位置生成允许的取值列表,同时记录所有verb的位置索引。
  2. 组合生成:用itertools.product生成所有可能的组合(笛卡尔积),覆盖所有可选元素的选择情况。
  3. 合法性过滤:对每个组合统计非空verb的数量,超过1的直接跳过。
  4. 短语拼接:过滤组合中的空字符串,将剩余部分按原顺序拼接成短语,最后去重(避免因不同组合生成相同短语)。

示例输出

运行示例代码后,会得到以下合法短语:

fix for
fix for a meal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:29