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

如何用Python实现输出数字或字符串字符的所有全排列

Python实现字符全排列方案

全排列逻辑对数字、字符串输入通用,只需要提前把数字转为字符串处理即可,总排列数恒等于输入字符长度的阶乘,和你描述的3!规则一致。

方案1:调用标准库快速实现

日常开发优先用这种写法,Python标准库itertools内置的permutations方法已经做了性能优化,直接调用即可生成全排列:

from itertools import permutations

def get_permutations(input_val):
    s = str(input_val)
    return [''.join(item) for item in permutations(s)]

# 测试
if __name__ == "__main__":
    test_val = 123
    res = get_permutations(test_val)
    for line in res:
        print(line)
    print(f"排列总数:{len(res)},等于{len(str(test_val))}的阶乘")
  • 输入存在重复字符时,该方法会生成重复排列项,需要去重的话把返回结果转为set再转回list即可。

方案2:手动实现递归逻辑

你提到的递归思路是可行的,核心逻辑分两步:

  • 终止条件:当待处理的字符串长度≤1时,它本身就是唯一的排列,直接返回
  • 递推逻辑:遍历字符串的每一位字符,把当前字符作为排列的首位,再递归求出剩余所有字符的全排列,把当前字符拼到剩余字符排列结果的最前面,汇总后就是全量排列结果

对应代码实现:

def recursive_permute(input_val):
    s = str(input_val)
    # 递归终止
    if len(s) <= 1:
        return [s]
    res = []
    for idx in range(len(s)):
        # 取当前位置字符作为首位
        first_char = s[idx]
        # 拼接剩下的字符
        rest = s[:idx] + s[idx+1:]
        # 递归求剩余字符的排列,拼接后存入结果
        for sub_perm in recursive_permute(rest):
            res.append(first_char + sub_perm)
    return res

# 测试
if __name__ == "__main__":
    test_val = 123
    res = recursive_permute(test_val)
    for line in res:
        print(line)
    print(f"排列总数:{len(res)}")

注:排列的输出顺序由实现逻辑决定,只要覆盖所有合法排列即满足要求。如果需要对重复输入去重,可以在遍历过程中跳过已经处理过的重复字符,减少无效递归计算。

内容的提问来源于stack exchange,提问作者Ofek Osher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:45:41