python 如何打印字符串的所有排列

6kkfgxo0  于 2023-01-01  发布在  Python
关注(0)|答案(3)|浏览(149)

编写打印字符串所有排列的程序

def permute(s, answer):
    if (len(s) == 0):
        print(answer, end="  ")
        return
 
    for i in range(len(s)):
        left_substr = s[0:i]
        right_substr = s[i + 1:]
        rest = left_substr + right_substr
        permute(rest, answer + ch)
 
answer = ""
 
s = "ABC"
 
print("All possible strings are : ")
permute(s, answer)

我本以为能得到字符串的排列。

ztyzrc3y

ztyzrc3y1#

也许这就是你要找的
注意--你的程序不会运行,因为前面指出的语法错误。而且这将使用 * permutations * lib方法。(假设这是某种 * 赋值)*; -)

def permute(s):
    if len(s) == 1:
        return [s]
    
    outs = []
    
    for i, ch in enumerate(s):
        outs += [ch + p for p in permute(s[:i] + s[i+1:])]
    return outs

print(permute('ABC'))
# ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
55ooxyrt

55ooxyrt2#

既然你的问题不清楚。这也是办法之一:

from itertools import permutations as p
s="ABC"
for x in range(len(s)+1):
    print(list(p(s,x)))

[()]
[('A',), ('B',), ('C',)]
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

链接到文档:itertools.permutations
如果您正在寻找这个:

[''.join(y) for y in p(s,3)]
['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
nbysray5

nbysray53#

在您的代码中,您已经编写了:

left_substr = s[0:i]
right_substr = s[i + 1:]
rest = left_substr + right_substr
permute(rest, answer + left_substr)

对于字符串的排列,left_substr应该是s[i]rest应该是s[0:i] + right_subst。需要注意的是,s[0:i]s[i]不同。第一个引用从索引0到索引i的列表切片,而s[i]引用索引i处的元素。因此,您的最终代码应该是:

def permute(s, answer):
    if (len(s) == 0):
        print(answer, end="  ")
        return

    for i in range(len(s)):
        left_substr = s[i]
        right_substr = s[i + 1:]
        rest = s[0:i] + right_substr
        permute(rest, answer + left_substr)

answer = ""
s = "ABC"
print("All possible strings are : ")
permute(s, answer)

相关问题