在下面的代码中,如果我在 for 循环中将
current
定义为整数,那么在 dfs 函数调用期间 current += 1
将出错,并显示“UnboundLocalError:赋值前引用的局部变量 'current_island'”。
def numIslands(grid):
def dfs(i,j):
if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]):
return
if(i,j) in visited or not grid[i][j]:
return
visited.add((i,j))
current += 1
dfs(i+1,j)
dfs(i-1,j)
dfs(i,j+1)
dfs(i,j-1)
visited = set()
res = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
current = 0
dfs(i,j)
if current_island:
res = max(len(current_island), res)
return res
但是如果我将
current
定义为像 current = set()
这样的集合,并在 dfs 中执行 current.add((i,j))
而不是 current += 1
那么就没有问题了。有人可以解释一下原因吗?
当您在为局部变量赋值之前尝试使用局部变量时,Python 中会出现“UnboundLocalError:赋值前引用的局部变量‘current_island’”错误。要修复此错误,您需要确保在尝试使用变量“current_island”之前已为其分配了值。在访问之前声明
current_island = False
。
尝试下面的代码:
def numIslands(grid):
def dfs(i,j):
if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]):
return
if(i,j) in visited or not grid[i][j]:
return
visited.add((i,j))
current += 1
dfs(i+1,j)
dfs(i-1,j)
dfs(i,j+1)
dfs(i,j-1)
visited = set()
res = 0
current_island = False
for i in range(len(grid)):
for j in range(len(grid[0])):
current = 0
dfs(i,j)
if current_island:
res = max(len(current_island), res)
return res