Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中精确地执行递归,包括列表?_Python_Python 3.x_List_Recursion_Backtracking - Fatal编程技术网

如何在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

我是一个试图学习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=“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)
。阿尔索