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']
实现逻辑说明
- 原字符串按分隔符全拆分后,
n个片段对应n-1个可拆分的间隙 - 要拆分
k次,本质就是从n-1个间隙中选k个位置做切割,所有选法可以通过itertools.combinations直接生成 - 最后将相邻切割点之间的片段用分隔符重新拼接,就得到对应拆分次数的所有可能结果
如果需要获取所有拆分次数的结果,遍历k从1到最大拆分次数收集返回值即可。
内容的提问来源于stack exchange,提问作者glezo
相关产品推荐
相关产品推荐

