如何获取字符串中所有可能的字符组合

所以我有一个这样的字符串:

"abc"

我会需要:

"abc"
"acb"
"bca"
"bac"
"cab"
"cba"

我试过:

string = "abc"

combinations = []
for i in range(len(string)):
    acc = string[i]
    for ii in range(i+1,i+len(string)):
            acc += string[ii%len(string)]
             
    combinations.append(acc)
    combinations.append(acc[::-1])
            
print(combinations)

如果适用于大小为 3 的字符串,但我认为它非常低效并且也不适用于"abcd". 有没有更好的方法?

更新:我想通过提供算法来解决。实际上目前正在以递归方式解决它。更喜欢不是python函数的解决方案为我解决问题

回答

对于排列:

使用 Itertools 库:

from itertools import permutations
ini_str = "abc"
print("Initial string", ini_str)
permutation = [''.join(p) for p in permutations(ini_str)]
print("Resultant List", str(permutation))

初始字符串 abc

结果列表 ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

递归方法:

def permutations(remaining, candidate=""):
    if len(remaining) == 0:
        print(candidate)
    for i in range(len(remaining)):
        newCandidate = candidate + remaining[i]
        newRemaining = remaining[0:i] + remaining[i+1:]
        permutations(newRemaining, newCandidate)

if __name__ == '__main__':
    s = "ABC"
    permutations(s)

迭代法:

def permutations(s):
    partial = []
    partial.append(s[0])
    for i in range(1, len(s)):
        for j in reversed(range(len(partial))):
            # remove current partial permutation from the list
            curr = partial.pop(j)
            for k in range(len(curr) + 1):
                partial.append(curr[:k] + s[i] + curr[k:])
    print(partial, end='')
  
if __name__ == '__main__':
    s = "ABC"
    permutations(s)


以上是如何获取字符串中所有可能的字符组合的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>