程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2020-02-25 19:55     阅读(292)     评论(0)     点赞(22)     收藏(4)


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

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

我将非常感谢您的帮助,因为我已经使用该算法很长时间了(我是编程的初学者)。


解决方案


如果我理解正确,则需要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"


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/233623/299796e17467926f3139/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)