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

Python按指定分隔符拆分字符串生成所有拆分组合的实现方案问询

解决方案

直接用Python标准库itertools.combinations就能实现,不需要手动写回溯,代码非常简洁:

import itertools

def get_all_splits(s: str, sep: str, split_count: int) -> list[list[str]]:
    # 先将字符串按分隔符完全拆分为最小片段
    fragments = s.split(sep)
    max_split = len(fragments) - 1
    # 入参校验
    if split_count < 1 or split_count > max_split:
        raise ValueError(f"拆分次数需介于1到{max_split}之间")
    result = []
    # 从所有可拆分位置中选split_count个位置的所有组合
    for select_points in itertools.combinations(range(1, len(fragments)), split_count):
        # 补全起止位置
        cut_points = [0, *select_points, len(fragments)]
        # 将相邻拆分点之间的片段重新拼接
        current_split = []
        for i in range(len(cut_points)-1):
            current_split.append(sep.join(fragments[cut_points[i]:cut_points[i+1]]))
        result.append(current_split)
    return result

# 测试示例
if __name__ == "__main__":
    test_str = "hi|guys|whats|app"
    # 拆分1次
    print("拆分1次的所有结果:")
    for r in get_all_splits(test_str, "|", 1):
        print(r)
    # 拆分2次
    print("\n拆分2次的所有结果:")
    for r in get_all_splits(test_str, "|", 2):
        print(r)
    # 拆分3次
    print("\n拆分3次的所有结果:")
    for r in get_all_splits(test_str, "|", 3):
        print(r)

运行结果

完全符合需求示例:

拆分1次的所有结果:
['hi', 'guys|whats|app']
['hi|guys', 'whats|app']
['hi|guys|whats', 'app']

拆分2次的所有结果:
['hi', 'guys', 'whats|app']
['hi', 'guys|whats', 'app']
['hi|guys', 'whats', 'app']

拆分3次的所有结果:
['hi', 'guys', 'whats', 'app']

实现逻辑说明

  1. 原字符串按分隔符全拆分后,n个片段对应n-1个可拆分的间隙
  2. 要拆分k次,本质就是从n-1个间隙中选k个位置做切割,所有选法可以通过itertools.combinations直接生成
  3. 最后将相邻切割点之间的片段用分隔符重新拼接,就得到对应拆分次数的所有可能结果
    如果需要获取所有拆分次数的结果,遍历k从1到最大拆分次数收集返回值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:07