我在使用Python停止迭代时遇到了一些麻烦。功能中出现此问题:
for z in range(w.steps):
for i in range(1,w.x-1):
for j in range(1,w.y-1):
print (i, j)
for r in data.c:
if w.world[i][j] in r:
print r
ind = data.c.index(r)
print ind
if w.world[i-1][j] in data.n[ind]:
if w.world[i][j+1] in data.e[ind]:
if w.world[i+1][j] in data.s[ind]:
if w.world[i][j-1] in data.w[ind]:
w.world[i][j] = data.cc[ind]
步骤数(第一个for
循环)由用户提供。接下来的两个for
循环用于迭代二维数组(x
- 行,y
- cols):
for i in range(1,w.x-1):
for j in range(1,w.y-1):
(打印仅用于控制) 对于数组中的每个单元格,我想要检查它的值。我在data.c列表中有所有可能的值(比如value = 14),看起来像那个:
li = [[2],[14,23],[4]]
所以说明:
for r in data.c:
if w.world[i][j] in r:
我想在第一个true
出现时停止迭代。如果函数将达到第一个相等的值,我想分配包含它的列表索引,并执行其他语句:
ind = data.c.index(r)
if w.world[i-1][j] in data.n[ind]:
if w.world[i][j+1] in data.e[ind]:
if w.world[i+1][j] in data.s[ind]:
if w.world[i][j-1] in data.w[ind]:
w.world[i][j] = data.cc[ind]
如果所有这些都是true
,我想执行最后一条指令(赋值),然后从数组转到下一个单元格。但如果其中至少有一个是false
,我想回去,并寻找data.c
列表中的下一个匹配(可能不止一个)。所有可能性中的列表值都是肯定的。重点是先使用匹配的。
我为1个单元格尝试了这个函数,我得到的索引比预期多得多,我不知道为什么。使用我的注释从数组输出一个单元格:
(1, 1) # print(i,j)
[0] # print r
3 # print data.c.index(r)
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
我会非常感谢任何帮助,因为我长时间处理这个算法(我是编程的初学者)。
答案 0 :(得分:2)
如果我理解正确,您需要发出break
声明。
for z in range(w.steps):
for i in range(1,w.x-1):
for j in range(1,w.y-1):
print (i, j)
for r in data.c:
if w.world[i][j] in r:
print r
ind = data.c.index(r)
print ind
if w.world[i-1][j] in data.n[ind]:
if w.world[i][j+1] in data.e[ind]:
if w.world[i+1][j] in data.s[ind]:
if w.world[i][j-1] in data.w[ind]:
w.world[i][j] = data.cc[ind]
break # <-- break "for r" and continue with "for j"
答案 1 :(得分:0)
for (z,i,j) in itertools.product(range(w.steps), range(1,w.x-1)), range(1,w.y-1)):
for r in data.c:
if w.world[i][j] in r :
ind = data.c.index(r)
if all (itertools.imap(lambda x, y: x in y,
(w.world[i-1][j], w.world[i][j+1],w.world[i+1][j], w.world[i][j-1]),
(data.n[ind], data.e[ind], data.s[ind], data.w[ind]))):
w.world[i][j] = data.cc[ind]
break