how to stop a for loop

前端 未结 8 1865
长情又很酷
长情又很酷 2020-11-27 03:00

I\'m writing a code to determine if every element in my nxn list is the same. i.e. [[0,0],[0,0]] returns true but [[0,1],[0,0]] will return false.

相关标签:
8条回答
  • 2020-11-27 03:19

    To achieve this you would do something like:

    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;
    
    0 讨论(0)
  • 2020-11-27 03:21

    To stop your loop you can use break with label. It will stop your loop for sure. Code is written in Java but aproach is the same for the all languages.

    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;
            }
        }
    }   
    

    }

    0 讨论(0)
  • 2020-11-27 03:25

    In order to jump out of a loop, you need to use the break statement.

    n=L[0][0]
    m=len(A)
    for i in range(m):
     for j in range(m):
       if L[i][j]!=n:
           break;
    

    Here you have the official Python manual with the explanation about break and continue, and other flow control statements:

    http://docs.python.org/tutorial/controlflow.html

    EDITED: As a commenter pointed out, this does only end the inner loop. If you need to terminate both loops, there is no "easy" way (others have given you a few solutions). One possiblity would be to raise an exception:

    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
    
    0 讨论(0)
  • 2020-11-27 03:26

    There are several ways to do it:

    The simple Way: a sentinel variable

    n = L[0][0]
    m = len(A)
    found = False
    for i in range(m):
       if found:
          break
       for j in range(m):
         if L[i][j] != n: 
           found = True
           break
    

    Pros: easy to understand Cons: additional conditional statement for every loop

    The hacky Way: raising an exception

    n = L[0][0]
    m = len(A)
    
    try:
      for x in range(3):
        for z in range(3):
         if L[i][j] != n: 
           raise StopIteration
    except StopIteration:
       pass
    

    Pros: very straightforward Cons: you use Exception outside of their semantic

    The clean Way: make a function

    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"
    

    pros: much cleaner and still efficient cons: yet feels like C

    The pythonic way: use iteration as it should be

    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"
    

    pros: still clean and efficient cons: you reinvdent the wheel

    The guru way: use any():

    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"
    

    pros: you'll feel empowered with dark powers cons: people that will read you code may start to dislike you

    0 讨论(0)
  • 2020-11-27 03:31

    Others ways to do the same is:

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

    Or:

    first_el = L[0][0]
    print all(el == first_el for inner_list in L for el in inner_list)
    
    0 讨论(0)
  • 2020-11-27 03:36

    Try to simply use break statement.

    Also you can use the following code as an example:

    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)
    
    0 讨论(0)
提交回复
热议问题