如何停止for循环
我正在编写代码以确定我的nxn列表中的每个元素是否相同。即[[0,0],[0,0]]返回true,但[[0,1],[0,0]]将返回false。我正在考虑编写一个代码,当它发现一个与第一个元素不相同的元素时立即停止。即:如何停止for循环
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。我将如何去实施这个?
使用break
和continue
做到这一点。打破嵌套循环可以使用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声明。
您也可以使用下面的代码为例:
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)
为了跳出循环,您需要使用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官方手册和其它的流程控制语句:
http://docs.python.org/tutorial/controlflow.html
编辑:作为一个评论者指出的那样,这并不只是结束内循环。如果您需要终止两个循环,则没有“简单”的方法(其他人已经给出了一些解决方案)。其中一个方法可行。将引发异常:
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
你打破了循环的内在,使用分号是不必要的和丑陋的。 – utdemir 2011-06-14 16:14:28
其他的方式做同样的是:
el = L[0][0]
m=len(L)
print L == [[el]*m]*m
或者:
first_el = L[0][0]
print all(el == first_el for inner_list in L for el in inner_list)
为了达到这个目的,你可以这样做:
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;
有几种方法可以做到这一点:
最简单的方法:定点变量
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
优点:易于理解 缺点:附加条件语句,每循环
哈克的方式:提出异议
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
个
优点:非常简单 缺点:使用异常的语义
的清洁方式之外:做一个功能
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"
优点:更清洁,仍然有效 缺点:但感觉像C
的Python的方式:使用迭代,因为它应该是
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"
个优点:还算干净,高效的 缺点:你reinvdent轮
的大师方式:使用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"
优点:人们会读你:你会觉得与黑暗的力量 利弊授权代码可能会开始不喜欢你
+1为guru的方式(没有好,无论如何伟大的答案,但真正喜欢古鲁的方式的利弊) – JMax 2014-08-26 08:40:08
哇,希望C#有'for ... else'构造! – Blindy 2011-06-14 16:06:37
哦,我希望对于C++,Java也是如此...... :-) – 2011-06-14 16:09:54
我试图让函数在休息之前返回一个值,但我不断收到一个警告,表示休息永远不会到达 – LostLin 2011-06-14 16:13:12