Python列表递归类型

2024-05-20 14:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

解决:问题似乎只发生在Python身上。我在IDLE的pythonshell中运行了所有的东西,它运行得很好。一定是PythonWin的bug,而不是代码本身。在

我似乎不明白为什么下面的代码给我一个TypeError: 'type' object is not iterable

粘贴箱:http://pastebin.com/VFZYY4v0

def genList(self):
    #recursively generates a sorted list of child node values
    numList = []
    if self.leftChild != 'none':
        numList.extend(self.leftChild.genList())  #error
    numList.extend(list((self.Value,)))
    if self.rightChild != 'none':
        numList.extend(self.rightChild.genList()) #error
    return numList

添加子节点的代码(工作正常)

^{pr2}$

任何帮助都将不胜感激。在

全口译员会话: &>&bteno导入 &>>>节点1=二进制代码(5)
&>>>节点2=二进制代码(2)
&>>>节点3=二进制代码(12)
&>>>节点3=二进制代码(16)
&>节点4=二进制代码(4)
&>>>节点5=二进制代码(13)
>;>>node1.addChild(node2)
>;>>node1.addChild(node3)
>;>>node1.addChild(node4)
>;>>node1.addChild(node5)
>;>>节点4.genList()
<;类“列表”>;
>;>>node1.genList()
回溯(最近一次呼叫):
文件“<;interactive input>;”,第1行,在<;module>;
文件“C:…\python\二进制代码.py“,第47行,在genList中
数字列表扩展(self.leftChild.genList())错误
文件“C:…\python\二进制代码.py“,第52行,genList中
TypeError:“type”对象不可编辑


Tags: 文件代码ltgtself节点type二进制
2条回答

在您的示例中没有任何内容可以说明问题的来源,但它的意思是您返回的是一个对象类型,而不是一个对象实例。在这一点上,我所能提供的就是建议另一种方法来重写genList()方法,看看它是否神奇地解决了您的问题。在

您可以尝试通过递归传递相同的结果列表,而不是返回大量临时结果:

def genList(self, numList=None):
    if numList is None:
        numList = []

    if self.leftChild != 'none':
        self.leftChild.genList(numList)

    numList.append(self.Value)

    if self.rightChild != 'none':
        self.rightChild.genList(numList)

    return numList

results = rootNode.genList()

另外,使用'none'而不是None有什么原因吗?我只使用None而不是字符串。在

我建议对您的版本进行编辑:http://pastebin.com/FGf8Lcdu

下面是python3.3下相同解释器代码的输出:

^{pr2}$

我会加上几张照片,看看它给出错误时的实际类型,比如:

def genList(self):
    #recursively generates a sorted list of child node values
    numList = []
    if self.leftChild != 'none':
        print self.leftChild.genList(), type(self.leftChild.genList())
        numList.extend(self.leftChild.genList())  #error
    numList.extend(list((self.Value,)))
    if self.rightChild != 'none':
        print self.rightChild.genList(), type(self.rightChild.genList())
        numList.extend(self.rightChild.genList()) #error
    return numList

一个不那么疯狂的猜测。。。 尝试而不是列表((自我价值观,))使用[自我价值观]. 我有一种感觉它会起作用的。。。:-)

相关问题 更多 >