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

如何用Python生成带分隔符的字符串单词所有组合?

问题分析

你需要生成目标字符串中所有非空单词子集的组合,每个子集内的单词用指定分隔符连接,且保持原字符串中的单词顺序。你之前的代码只覆盖了连续前缀的组合,漏掉了非连续子集(比如good-student)和单个单词的情况,所以不符合预期。

最优解决方案

使用itertools.combinations生成所有符合要求的单词子集,再遍历分隔符完成拼接,具体代码如下:

import itertools

def create_name_combos(mystring, separators):
    words = mystring.split()
    combos = set()
    
    # 遍历所有可能的子集长度(1到单词总数)
    for subset_length in range(1, len(words) + 1):
        # 生成当前长度下的所有单词组合(保持原字符串顺序)
        for word_subset in itertools.combinations(words, subset_length):
            # 用每个分隔符拼接当前子集
            for sep in separators:
                combos.add(sep.join(word_subset))
    
    # 转为有序列表返回(也可以直接返回集合,按需调整)
    return sorted(combos)

代码说明

  1. 分割字符串:将输入字符串按空格拆分为单词列表。
  2. 生成子集:通过itertools.combinations生成所有非空的单词子集,确保子集内单词顺序与原字符串一致。
  3. 拼接组合:对每个子集,用所有指定分隔符进行拼接,存入集合自动去重(避免意外重复)。
  4. 返回结果:将集合转为有序列表返回,方便查看。

测试验证

调用示例:

# 测试代码
result = create_name_combos("good university student", ["-", "+"])
for item in result:
    print(item)

输出结果(排序后):

good
good-student
good-university
good-university-student
good+student
good+university
good+university+student
student
university
university-student
university+student

这个结果完全覆盖了你给出的预期输出。

原代码问题说明

你之前的代码存在以下缺陷:

  • 仅处理了连续前缀的组合,无法生成非连续的子集(比如good-student)。
  • 没有生成单个单词的情况。
  • 循环逻辑错误,range(len(words)-1)会漏掉最后一个单词的处理,且拼接方式有误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:00:05