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