[英]All Permutations of a String in Python using Recursion
我有以下 Python 代碼,它使用遞歸返回給定字符串的所有排列的列表。 我盡我最大的努力去理解代碼的工作,但我沒能做到。 任何人都可以給我下面提到的代碼的細分嗎?
def permute(s):
out = []
# Base Case
if len(s) == 1:
out = [s]
else:
# For every letter in string
for i, let in enumerate(s):
for perm in permute(s[:i] + s[i+1:]):
# Add it to output
out += [let + perm]
return out
permute('abc')
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
如果字符串的長度為 1,則只有置換,因此在這種情況下它僅返回該字符串。
如果有更多的字母,但是,它通過在字符串中的每一個字母,它們均視為在得到中添加的排列的第一個字母out
在迭代。 然后它遍歷字符串其余部分的每個排列,並將每個排列添加到out
, let
是第一個字母。
但是作為permute('aab')
不會產生['aab', 'aba', 'baa']
; 每個條目將在返回的列表中出現兩次。
為避免這種情況,請改用集合。 所以out = set()
、 out = {s}
和out.add(let + perm)
而不是out = []
、 out = [s]
和out.append(let + perm)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.