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

如何在Python中生成移除空格且保留顺序的子串组合

解决移除空格生成所有组合的问题

核心思路

要生成所有移除一个或多个空格(同时保持字符顺序)的字符串组合,关键是先定位所有空格的位置,再枚举这些位置的所有非空子集,对每个子集移除对应空格后拼接字符串,再加上原字符串即可。

代码实现

from itertools import combinations

original = "This is my pen"
# 把字符串转成字符列表,方便操作单个位置的字符
chars = list(original)
# 找出所有空格的索引位置
space_indices = [i for i, char in enumerate(chars) if char == ' ']
result = []

# 先加入原字符串(对应不移除任何空格的情况)
result.append(original)

# 遍历移除1个、2个...直到所有空格的情况
for remove_count in range(1, len(space_indices) + 1):
    # 生成所有选remove_count个空格位置的组合
    for positions in combinations(space_indices, remove_count):
        # 复制原字符列表,避免修改原始数据
        temp_chars = chars.copy()
        # 逆序删除空格:正序删除会导致后续索引偏移,逆序就不会有这个问题
        for idx in sorted(positions, reverse=True):
            del temp_chars[idx]
        # 拼接成字符串并加入结果
        result.append(''.join(temp_chars))

# 打印结果
print(result)

代码解释

  1. 定位空格位置:用列表推导式遍历字符列表,记录所有空格的索引,比如原字符串的空格在索引4、7、10处。
  2. 枚举移除组合:用combinations生成所有移除1个、2个直到全部空格的位置组合,比如移除1个空格时,会得到(4,)、(7,)、(10,)这三种情况。
  3. 正确删除空格:必须逆序删除选中的空格位置——如果正序删除,前面的字符被删掉后,后面的空格索引会发生变化,导致删错位置;逆序删除就不会有这个问题。
  4. 拼接结果:把删除后的字符列表拼接成字符串,加入结果列表。

为什么你之前的尝试有问题

  • strip(idx)完全不适用:strip是用来移除字符串首尾的指定字符,无法删除指定位置的字符。
  • 用combinations时没处理索引偏移:直接按正序删除空格会导致后续索引错位,逆序删除是解决这个问题的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:01:16