if语句为true时如何停止迭代?

2024-05-23 20:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在停止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-列):

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

我将非常感谢任何帮助,因为我处理这个算法很长时间了(我是一个编程初学者)。


Tags: 函数intrue列表forworlddataindex
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"
    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

相关问题 更多 >