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

Python中不使用itertools生成动态字符串的单词全排列

不使用itertools实现任意长度单词的全排列

完全可以通过递归方法实现,不需要依赖itertools模块,且能适配任意长度的输入字符串,解决你提到的“需要提前指定变量数量才能join”的问题。

核心思路

通过递归逐步构建排列:每次从剩余单词中选一个作为当前排列的首元素,再递归处理剩下的单词,直到所有单词都被使用,最终拼接成完整的排列字符串。

实现代码

def get_permutations(words):
    # 递归终止:剩余单词为空,返回空排列列表的列表
    if not words:
        return [[]]
    permutations = []
    for idx in range(len(words)):
        # 选取当前单词,并生成剩余单词列表
        current = words[idx]
        remaining = words[:idx] + words[idx+1:]
        # 递归获取剩余单词的所有排列,拼接当前单词后加入结果
        for p in get_permutations(remaining):
            permutations.append([current] + p)
    return permutations

# 测试示例
if __name__ == "__main__":
    # 示例1:3个单词的情况
    s1 = "James is King"
    words1 = s1.split()
    result1 = [' '.join(perm) for perm in get_permutations(words1)]
    print("输入'James is King'的输出:")
    for item in result1:
        print(item)
    
    print("\n" + "-"*30 + "\n")
    
    # 示例2:2个单词的情况
    s2 = "Big Small"
    words2 = s2.split()
    result2 = [' '.join(perm) for perm in get_permutations(words2)]
    print("输入'Big Small'的输出:")
    for item in result2:
        print(item)

关键说明

  1. 适配任意长度:递归逻辑不依赖固定的单词数量,不管输入是1个、2个还是N个单词,都能自动生成所有全排列。
  2. 解决join的动态问题:每个排列结果是一个完整的单词列表,直接用' '.join(perm)拼接即可,不需要提前知道单词数量来指定变量。
  3. 边界情况处理:如果输入只有单个单词(如s="Hello"),会直接返回该单词本身;如果输入空字符串,会返回空列表(可根据需求调整)。

内容的提问来源于stack exchange,提问作者MOHAMMED ASIF KHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:52:14