Python 中字串的排列
Manav Narula
2023年1月30日
通過排列,我們的意思是在不考慮重排順序的情況下,以獨特的方式對給定數量的元素可能進行的重排總數。
正如我們所知,字串可以被認為是單個字元的集合。
在本文中,我們將嘗試找到給定字串的所有可能排列。
使用 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 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