簡體   English   中英

Python中的遞歸和列表

[英]Recursion and lists in Python

這是我要做的事情的簡化版本:

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)      

我沒有嘗試用語言表達我的期望,而是制作了一些圖表來表達我的想法:

在此處輸入圖片說明

這意味着應該將類a中的函數調用4次。 但是,它僅被調用兩次,因此似乎正在發生這種情況:

在此處輸入圖片說明

我不明白為什么會這樣或我應該如何解決。

不確定,但是我認為您的問題是此行:

newlist = oldlist

我猜您想復制列表(而不是更改oldlist ),因此您應該簡單地使用:

newlist = oldlist[:]

因此將func更改為

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

版畫

BBA
BBB
ABB
BBB

func您需要創建一個oldlist副本,否則它將修改相同的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM