Python中的递归和列表

Rob*_*yen 2 python recursion

这是我正在尝试做的简化版本:

class a():
    Requirement = 0
    def func(self, oldlist, x):
        newlist = [None]*3
        newlist = oldlist
        newlist[x]  = b()
        print "Class a"
        g(newlist)


class b():
    Requirement = 1


def g(list):
    for i in range(3):
        if list[i].Requirement==0:
            list[i].func(list,i)

Initiallist=[None]*3
Initiallist[0]=a()
Initiallist[1]=b()
Initiallist[2]=a()
g(Initiallist)      
Run Code Online (Sandbox Code Playgroud)

我没有试图表达我对文字的期望,而是制作了一些图表来表达我脑海中应该发生的事情:

在此输入图像描述

这意味着应该调用类a中的函数4次.但是,它只被调用2次,所以似乎发生了这种情况:

在此输入图像描述

我不明白为什么会这样或我应该如何解决它.

slo*_*oth 5

不确定,但我认为你的问题是这一行:

newlist = oldlist
Run Code Online (Sandbox Code Playgroud)

我想你想要复制列表(而不是改变oldlist),所以你应该简单地使用:

newlist = oldlist[:]
Run Code Online (Sandbox Code Playgroud)

所以func改为

def func(self, oldlist, x):
    newlist = oldlist[:]
    newlist[x] = b()
    print "".join(x.__class__.__name__ for x in newlist)
    g(newlist)
Run Code Online (Sandbox Code Playgroud)

版画

bba
bbb
abb
bbb

  • 如果你愿意,记得把它作为答案勾选=) (2认同)