如何循环为单词插入点号分隔且避免出现连续点号的重复变体
问题原因
- 第二层循环插入点时没有判断插入位置的字符属性,直接在已有
.的相邻位置插入,就会产生连续点 - 第一层循环生成的所有单次插点结果都存在
lis里,但第二层循环只用到了第一层最后一次循环的sliceword变量,逻辑完全错位 - 没有做去重处理,相同的变体会被多次输出
修正后代码
print("enter email without @gmail.com") word = input("word: ") n = len(word) # 用集合存储天然去重 result = set() # 生成所有插1个点的变体 for i in range(1, n): single_dot = word[:i] + "." + word[i:] result.add(single_dot) # 基于当前第一个点的位置,在后面插入第二个点,避免连续点和重复 for j in range(i + 1, n): double_dot = word[:i] + "." + word[i:j] + "." + word[j:] result.add(double_dot) # 排序后输出 for item in sorted(result): print(item)
逻辑说明
- 直接基于原始单词插入分隔点,强制要求第二个点的位置必须在第一个点后至少1个字符的位置,从根源避免连续点生成
- 用集合存储所有变体,自动过滤重复结果
- 如果后续需要生成更多分隔点的变体,只需要按相同逻辑扩展循环即可,不需要在上一轮生成的带点字符串上二次修改
内容的提问来源于stack exchange,提问作者Seyi
相关产品推荐
相关产品推荐

