Python 如何停止for循环

Python 如何停止for循环,python,Python,我正在编写一个代码来确定nxn列表中的每个元素是否相同。i、 e.[[0,0],[0,0]]返回true,但[[0,1],[0,0]]将返回false。我正在考虑编写一个代码,当它发现一个元素与第一个元素不同时立即停止。i、 e: n=L[0][0] m=len(A) for i in range(m): for j in range(m): if L[i][j]==n: -continue the loop- else: -stop the loop- 如果L[I][j

我正在编写一个代码来确定nxn列表中的每个元素是否相同。i、 e.
[[0,0],[0,0]]
返回true,但
[[0,1],[0,0]]
将返回false。我正在考虑编写一个代码,当它发现一个元素与第一个元素不同时立即停止。i、 e:

n=L[0][0]
m=len(A)
for i in range(m):
 for j in range(m):
   if
    L[i][j]==n: -continue the loop-
   else: -stop the loop-
如果
L[I][j],我想停止这个循环==n
并返回false。否则返回true。我将如何实现这一点?

试着简单地使用语句

n=L[0][0]
m=len(A)
for i in range(m):
 for j in range(m):
   if L[i][j]!=n:
       break;
您还可以使用以下代码作为示例:

a = [[0,1,0], [1,0,0], [1,1,1]]
b = [[0,0,0], [0,0,0], [0,0,0]]

def check_matr(matr, expVal):    
    for row in matr:
        if len(set(row)) > 1 or set(row).pop() != expVal:
            print 'Wrong'
            break# or return
        else:
            print 'ok'
    else:
        print 'empty'
check_matr(a, 0)
check_matr(b, 0)

使用
中断
继续
执行此操作。可以使用以下方法在Python中断开嵌套循环:

for a in range(...):
   for b in range(..):
      if some condition:
         # break the inner loop
         break
   else:
      # will be called if the previous loop did not end with a `break` 
      continue
   # but here we end up right after breaking the inner loop, so we can
   # simply break the outer loop as well
   break

另一种方法是将所有内容封装在函数中,并使用
return
从循环中退出。

要跳出循环,需要使用break语句

n=L[0][0]
m=len(A)
for i in range(m):
 for j in range(m):
   if L[i][j]!=n:
       break;
这里有官方的Python手册,其中有关于break和continue的解释,以及其他流控制语句:

编辑:正如一位评论员指出的那样,这只会结束内部循环。如果您需要终止这两个循环,没有“简单”的方法(其他人给了您一些解决方案)。一种可能性是提出一个例外:

def f(L, A):
    try:
        n=L[0][0]
        m=len(A)
        for i in range(m):
             for j in range(m):
                 if L[i][j]!=n:
                     raise RuntimeError( "Not equal" )
        return True
    except:
        return False

使用break语句:

其他执行相同操作的方法是:

el = L[0][0]
m=len(L)

print L == [[el]*m]*m
或:


要实现这一点,您可以执行以下操作:

n=L[0][0]
m=len(A)
for i in range(m):
    for j in range(m):
        if L[i][j]==n:
            //do some processing
        else:
            break;

有几种方法可以做到这一点:

简单的方法:一个哨兵变量 优点:容易理解 缺点:每个循环都有额外的条件语句

骇人的方式:引发异常 优点:非常简单 缺点:您使用的异常超出了它们的语义范围

干净的方法:创建函数 优点:更清洁,更高效 缺点:但感觉像C

pythonic方法:按原样使用迭代 优点:仍然干净高效 缺点:你重新安装了方向盘

大师之道:使用
any()
: 优点:你会感受到黑暗力量的力量
缺点:阅读您代码的人可能开始不喜欢您

要停止循环,您可以使用中断标签。它肯定会停止你的循环。代码是用Java编写的,但所有语言的aproach都是相同的

public void exitFromTheLoop() {
    boolean value = true;
            loop_label:for (int i = 0; i < 10; i++) {
              if(!value) { 
                 System.out.println("iteration: " + i);
              break loop_label;
        }
    }
}   
public void exitFromTheLoop(){
布尔值=真;
循环标签:for(int i=0;i<10;i++){
如果(!value){
System.out.println(“迭代:+i”);
断环标签;
}
}
}   

}

我知道这个问题很久以前就被问到了,但如果这对其他人有帮助的话,下面是我的答案:

我发现在使用while循环时更容易理解,这样它将停止两个循环。下面的代码在调用函数check\u nxn\u list()时也会返回True/False。可能必须在函数调用中添加一些参数

def check_nxn_list():
    state = True
    n=L[0][0]
    m=len(A)
    while state == True:
        for i in range(m):
            for j in range(m):
                if L[i][j]!=n:
                    state = False
        break
    return state

while循环结束时的中断需要结束循环,即使状态保持为真。

Wow,希望C#拥有该
for…else
构造!哦,我希望C++,java,…我试图让函数在中断前返回一个值,但我一直收到一个警告,说对于创造性的答案,中断永远不会达到+1,但这真的值得吗?你可以简单地做,如果发现:打破。更简短,更容易阅读。最好的是,重新键入,不要试图复制和粘贴-Python在缩进问题上搞砸了。你只是打破了内部for循环,使用分号是不必要的,而且很难看。+1表示专家方式(不好,回答很好,但非常喜欢专家方式的优缺点)我喜欢这种方法。看起来你的答案是用C++或JS编写的,但是问题是在Python你好,FalCO,欢迎你这么做。请慢慢来,并在回答中正确设置代码格式。你可以做到。
def is_different_value(l, elem, size):
  for x in range(size):
    for z in range(size):
     if l[i][j] != elem: 
       return True
  return False

if is_different_value(L, L[0][0], len(A)):
  print "Doh"
def is_different_value(iterable):
  first = iterable[0][0]
  for l in iterable:
    for elem in l:
       if elem != first: 
          return True
  return False

if is_different_value(L):
  print "Doh"
def is_different_value(iterable):
  first = iterable[0][0]
  return  any(any((cell != first for cell in col)) for elem in iterable)):

if is_different_value(L):
  print "Doh"
public void exitFromTheLoop() {
    boolean value = true;
            loop_label:for (int i = 0; i < 10; i++) {
              if(!value) { 
                 System.out.println("iteration: " + i);
              break loop_label;
        }
    }
}   
def check_nxn_list():
    state = True
    n=L[0][0]
    m=len(A)
    while state == True:
        for i in range(m):
            for j in range(m):
                if L[i][j]!=n:
                    state = False
        break
    return state