据我所知,虽然声明需要条件才能工作,但这里没有任何作用;怎么可能? while q:
如何运作?
代码如下: ...
q = set([])
for i in range(N):
q.add((i, 0))
q.add((i, M - 1))
w[i][0] = h[i][0]
w[i][M - 1] = h[i][M - 1]
for i in range(M):
q.add((0, i))
q.add((N - 1, i))
w[0][i] = h[0][i]
w[N - 1][i] = h[N - 1][i]
while q:
ci, cj = q.pop()
for ii, jj in ((0, 1), (0, -1), (1, 0), (-1, 0)):
ni, nj = ci + ii, cj + jj
if 0 <= ni < N and 0 <= nj < M:
if w[ni][nj] != h[ni][nj] and (w[ni][nj] is None or w[ni][nj] > w[ci][cj]):
w[ni][nj] = max(h[ni][nj], w[ci][cj])
q.add((ni, nj))
答案 0 :(得分:6)
while
循环计算它作为布尔值给出的任何表达式。几乎Python中的所有内容都有一个布尔值。空容器(例如set()
)通常评估为False
,而非空容器(例如具有至少一个元素的集合)评估为True
。
while q:
可以被解读为&#34;循环而q
不为空&#34;,即&#34;循环,只要q
未评估为布尔False
&#34;。
另外,您编写的任何课程的实例通常会评估为True
。您可以通过在类中实现返回其他内容的__bool__
方法来修改此问题。
此外,q = set()
工作正常。无需q = set([])
。
答案 1 :(得分:1)
有一个条件。 只要集q中有元素,循环就会迭代。
如果你写了:
,你会得到类似的效果while len(q):
# do something
甚至
while len(q) > 0:
#do something
然而,这些表达可能被视为有点多余。