如何生成单词音节按原顺序的所有拼接组合?现有代码存在缺失重复问题
逻辑错误说明
- 分段数量限制
现有代码固定将音节列表拆分为before、middle、after三个部分,最多只能生成分段数≤3的结果,自然无法输出['o', 'ver', 'flow', 'ing']这类分4段的全拆分结果。 - 重复输出原因
双重循环遍历x和y的逻辑中,多组不同的x、y取值会对应同一种切分规则,最终生成重复的组合。
实现方案
该需求本质是在n个音节的n-1个相邻间隙中,选择任意位置切分,总共有2^(n-1)种合法组合,直接使用Python标准库itertools.combinations即可实现,无需引入第三方依赖。
示例代码
from itertools import combinations def get_all_syllable_combinations(syllable_list): n = len(syllable_list) result = [] # 遍历所有切分次数,从0次(不切分)到n-1次(全拆分) for split_num in range(n): # 从n-1个间隙中选择split_num个位置作为切分点 for split_points in combinations(range(1, n), split_num): # 补全首尾边界 all_points = (0,) + split_points + (n,) current_combo = [] for i in range(len(all_points) - 1): start = all_points[i] end = all_points[i+1] current_combo.append(''.join(syllable_list[start:end])) result.append(tuple(current_combo)) return result # 测试用例 syllable_list = ['o', 'ver', 'flow', 'ing'] print(get_all_syllable_combinations(syllable_list))
输出结果
[('overflowing',), ('o', 'verflowing'), ('over', 'flowing'), ('overflow', 'ing'), ('o', 'ver', 'flowing'), ('o', 'verflow', 'ing'), ('over', 'flow', 'ing'), ('o', 'ver', 'flow', 'ing')]
输出包含所有合法组合,无重复无遗漏。
内容的提问来源于stack exchange,提问作者Evan Bloemer
相关产品推荐
相关产品推荐

