【发布时间】:2021-01-30 14:34:41
【问题描述】:
在我写的代码中,for i in graph部分出现了一个名为RuntimeError: dictionary changed size during iteration的错误。尽管我根本没有更改图形字典。这个我试验了一下,好像for语句中不能使用defaultdict,但是效果很好,我试验的代码也附上了,不知道为什么会出现这个错误?
def canFinish(numCourses: int, prerequisites:[[]]) -> bool:
graph = collections.defaultdict(list)
visited = set()
for i in prerequisites:
graph[i[0]].append(i[1])
def _dfs(i):
if i in visited:
return False
visited.add(i)
for e in graph[i]:
if not _dfs(e):
return False
visited.remove(i)
return True
for i in graph:
if not _dfs(i):
return False
return True
---------------------------------------------------------------------------
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-37-33d660346b1a> in <module>
----> 1 canFinish(3, [[0,1],[0,2],[1,2]])
<ipython-input-36-fd2cb0d8dafb> in canFinish(numCourses, prerequisites)
20
21
---> 22 for i in graph:
23 if not _dfs(i):
24 return False
RuntimeError: dictionary changed size during iteration
实验代码
a = defaultdict(list)
a[1] = [3,4,5]
a[2]
for q in a:
print(q)
"""
OUTPUT : 1,2
"""
【问题讨论】:
-
你能发布完整的错误信息和回溯吗?
-
我有点困惑,您刚刚编辑的错误与您在帖子中谈论的错误非常不同。我以为你在处理
RuntimeError而不是NameError?如果它只是一个NameError,那么确保from collections import defaultdict位于任何.py文件的顶部。 -
@BeanBagTheCat 我很抱歉。我又编辑了
标签: python