Python 中字符串的排列

Manav Narula 2023年1月30日
  1. 使用 itertools.permutations() 函数返回 Python 中字符串的所有排列
  2. 创建一个用户定义的函数来返回 Python 中字符串的所有排列
Python 中字符串的排列

通过排列,我们的意思是在不考虑重排顺序的情况下,以独特的方式对给定数量的元素可能进行的重排总数。

正如我们所知,字符串可以被认为是单个字符的集合。

在本文中,我们将尝试找到给定字符串的所有可能排列。

使用 itertools.permutations() 函数返回 Python 中字符串的所有排列

itertools 模块用于创建和处理不同的可迭代对象。该模块中的 permutations() 函数可以返回给定值集的所有可能排列。
它返回一个 itertools 类型的对象,其中包含一个包含元素可能排列的元组。我们可以使用一个列表来查看这个对象的元素。我们也可以将此函数与字符串一起使用。

例如,

from itertools import permutations

lst = list(permutations("day"))
print(lst)

输出:

[('d', 'a', 'y'), ('d', 'y', 'a'), ('a', 'd', 'y'), ('a', 'y', 'd'), ('y', 'd', 'a'), ('y', 'a', 'd')]

注意输出中创建的包含字符排列的元组。我们可以使用 join() 函数和列表推导式将其更改为字符串列表。

请参考以下代码。

from itertools import permutations

lst = ["".join(p) for p in permutations("day")]
print(lst)

输出:

['day', 'dya', 'ady', 'ayd', 'yda', 'yad']

我们使用 join() 函数组合元组元素,并通过遍历列表将其用于​​每个元组。

创建一个用户定义的函数来返回 Python 中字符串的所有排列

我们可以创建一个简单的函数来查找字符串的所有排列。我们将创建一个递归函数。在这个方法中,我们将只交换一次字符串元素,然后用新的排列再次调用该函数。我们显示最终安排。

我们在下面的代码中实现了上面的逻辑。

def string_permutations(s, i, n):
    if i == n:
        print("".join(s))
    else:
        for j in range(i, n):
            s[i], s[j] = s[j], s[i]
            string_permutations(s, i + 1, n)
            s[i], s[j] = s[j], s[i]


a = "day"
x = len(a)
s = list(a)
print(permute(s, 0, x))

输出:

day
dya
ady
ayd
yad
yda
None

如你所见,开始和结束位置被指定在我们希望完成重新排列的位置。该字符串也作为字符列表传递。为了找到所有可能的排列,我们将开始设置为 0,将结束设置为字符串的长度。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python String