类方法从其上一次执行(Python)继承列表
请参阅此处的完整工作目录: 所以我在研究一些图论和用Python编写代码的东西。我创建了一个名为Graph的类,如下所示(不用担心缩进,在文件本身中就可以了): 及 现在,在另一个文件中,我初始化了一个新的类方法从其上一次执行(Python)继承列表,python,class,graph-theory,Python,Class,Graph Theory,请参阅此处的完整工作目录: 所以我在研究一些图论和用Python编写代码的东西。我创建了一个名为Graph的类,如下所示(不用担心缩进,在文件本身中就可以了): 及 现在,在另一个文件中,我初始化了一个新的图,我称之为g,以简化并在其上进行测试 print("BFS for 1 and 2 # --> should return True") print( g.bfs(2, Queue(1) ), end="\n\n" ) print("BFS for 1 and 4 # -->
图
,我称之为g
,以简化并在其上进行测试
print("BFS for 1 and 2 # --> should return True")
print( g.bfs(2, Queue(1) ), end="\n\n" )
print("BFS for 1 and 4 # --> should return True") # but returns False!!!
print( g.bfs(4, Queue(1) ), end="\n\n" )
现在,当我开始调试它时,我注意到,出于某种原因跟踪已检查节点的checked
列表中充满了第一次调用该函数检查的节点,即使我在def bfs(…)中将其隐式设置为checked=list()
声明,以便每次有人调用函数时该声明都为空。这种异常行为导致它不检查节点4,因为它认为它已经被检查过(checked=[1,3,4]
),因此第二时间函数决定两个节点没有连接并返回False
如果我在队列(1)
之后传递[]
空列表,则可以解决此问题,如下所示:
print( g.bfs(4, Queue(1), [] ) )
然而,这会使事情复杂化,我也只是想知道它为什么会这样做。因此,如果有人知道这里到底发生了什么,我期待着你的回应 (元建议:最好不要将投票评论编辑成问题。改为添加评论,解释为什么您认为它不是重复的,并且请记住,一位经验丰富的海报是真诚地做出这一决定的。在表达您的观点时,请避免使用所有的大写字母。)@halfer好的,对不起,我压力太大了。你说得对。不用担心——即使是这里的长期用户有时也会得到他们不喜欢的投票或接近。它发生了
:-)
class Queue:
def __init__(self, element):
if isinstance(element, list):
self.storage = element
else:
self.storage = [element]
def ins(self, element):
self.storage.insert(0, element)
return element
def pop(self):
temp = self.storage[0]
self.storage.pop(0)
return temp
def length(self):
return len(self.storage)
print("BFS for 1 and 2 # --> should return True")
print( g.bfs(2, Queue(1) ), end="\n\n" )
print("BFS for 1 and 4 # --> should return True") # but returns False!!!
print( g.bfs(4, Queue(1) ), end="\n\n" )
print( g.bfs(4, Queue(1), [] ) )