如何在python中精确地执行递归,包括列表?
我是一个试图学习Python中递归的初学者。 我想打印给定字符串的所有排列。 例如: 输入:AABC 输出:AABC、AACB、ABAC、ABCA、ACAB、BAAC、BACA、BCAA、CAAB、CABA、CBAA 我使用递归在Python中编写了以下代码如何在python中精确地执行递归,包括列表?,python,python-3.x,list,recursion,backtracking,Python,Python 3.x,List,Recursion,Backtracking,我是一个试图学习Python中递归的初学者。 我想打印给定字符串的所有排列。 例如: 输入:AABC 输出:AABC、AACB、ABAC、ABCA、ACAB、BAAC、BACA、BCAA、CAAB、CABA、CBAA 我使用递归在Python中编写了以下代码 def foo(str,count): result=“” 而(任何(计算)): 对于范围内的i(len(count)): 如果计数[i]>0: 计数[i]-=1 结果=str[i]+foo(str,count) 打印(结果) 返回结果 s
def foo(str,count):
result=“”
而(任何(计算)):
对于范围内的i(len(count)):
如果计数[i]>0:
计数[i]-=1
结果=str[i]+foo(str,count)
打印(结果)
返回结果
s=“AABC”
n=4
c={}
对于范围内的i(len(s)):
如果s[i]在c中:
c[s[i]]+=1
其他:
c[s[i]]=1
str=列表(c.keys())
计数=列表(c.值())
打印(str,计数)
foo(str,count)
打印(计数)
我得到的结果如下:
['A','B','C'][2,1,1]
C
BC
ABC
AABC
[0,0,0]
这意味着代码在每个级别上只处理第一个案例。如何更正此代码?任何帮助都会很好。
谢谢您的时间:)我不确定您使用的是什么
count
,但这里有一种递归方法(虽然不是很理想)
输出:
AABC
AACB
ABAC
ABCA
ACAB
ACBA
AABC
AACB
ABAC
ABCA
ACAB
ACBA
BAAC
BACA
BAAC
BACA
BCAA
BCAA
CAAB
CABA
CAAB
CABA
CBAA
CBAA
如果您想要不同的字符串,可以将它们添加到
集合中我不确定您使用count
的目的是什么,但这里有一种递归方式(虽然不是很理想):
输出:
AABC
AACB
ABAC
ABCA
ACAB
ACBA
AABC
AACB
ABAC
ABCA
ACAB
ACBA
BAAC
BACA
BAAC
BACA
BCAA
BCAA
CAAB
CABA
CAAB
CABA
CBAA
CBAA
如果您需要不同的字符串,可以将它们添加到集合中您的代码看起来有点凌乱,我很难理解您是如何解决问题的。我试图创建尽可能简单的解决方案,以帮助您理解创建任何类型列表组合背后的逻辑
def combinations(x):
if len(x) == 1:
yield x
for idx, i in enumerate(x):
for comb in combinations(x[:idx]+x[idx+1:]):
yield i + comb
s = "AABC"
print(list(combinations(s))) # -> ['AABC', 'AACB', 'ABAC', 'ABCA', 'ACAB' ...
x[:idx]+x[idx+1://code>这里仅仅是在idx
的位置去掉x
的元素。如果您有任何问题,请添加注释,以便我可以帮助您更好地理解我的解决方案。您的代码看起来有点凌乱,我很难理解您是如何试图用它解决问题的。我试图创建尽可能简单的解决方案,以帮助您理解创建任何类型列表组合背后的逻辑
def combinations(x):
if len(x) == 1:
yield x
for idx, i in enumerate(x):
for comb in combinations(x[:idx]+x[idx+1:]):
yield i + comb
s = "AABC"
print(list(combinations(s))) # -> ['AABC', 'AACB', 'ABAC', 'ABCA', 'ACAB' ...
x[:idx]+x[idx+1://code>这里仅仅是在idx
的位置去掉x
的元素。如果您有任何问题,请添加注释,以便我可以帮助您更好地理解我的解决方案。我找到了一些可行的方法,但由于字符“a”多次出现,因此它给出了重复的答案,因此我使用set()来获得所需的答案
def foo(s,l,result):
if len(result)==4:
l.append(result)
for i in range(len(s)):
foo(s[0:i]+s[i+1:],l,result+s[i])
s = "AABC"
l = []
r = foo(s,l,"")
print(list(set(l)))
我找到了一些可行的方法,但由于字符“A”多次出现,它会给出重复的答案,因此我使用set()来获得所需的答案
def foo(s,l,result):
if len(result)==4:
l.append(result)
for i in range(len(s)):
foo(s[0:i]+s[i+1:],l,result+s[i])
s = "AABC"
l = []
r = foo(s,l,"")
print(list(set(l)))
这回答了你的问题吗?什么是计数?计数用于存储字符串中每个字符的出现次数。这是否回答了您的问题?什么是count
?count用于存储字符串中每个字符的出现次数。谢谢,它可以工作。但我不熟悉enumerate。如果您熟悉这里的实现方法,请参见zip(range(len(list)),list)
。也谢谢它的工作。但我不熟悉enumerate。如果您熟悉这里的实现方法,请参见zip(range(len(list)),list)
。阿尔索