在C ++中,可以说:
for (int i = 0; i < 100 && !found; i++) {
if (items[i] == "the one I'm looking for")
found = true;
}
所以你不需要使用“break”语句。
在Python中,我想你需要写:
found = False
for item in items:
if item == "the one I'm looking for"
found = True
break
我知道我可以编写一个具有相同代码的生成器,所以我可以隐藏这个破坏的东西。但我想知道是否有任何其他方法可以实现相同的功能(具有相同的性能),而无需使用额外的变量或while循环。
我知道我们可以说:
found = "the one I'm looking for" in items
我只是想了解是否可以在for循环中使用多个条件。
感谢。
答案 0 :(得分:5)
>>> from itertools import dropwhile
>>> try:
... item = next(dropwhile(lambda x: x!="the one I'm looking for", items))
... found = True
... except:
... found = False
当然你也可以在没有lambda函数的情况下编写这个
>>> from itertools import dropwhile
>>> try:
... item = next(dropwhile("the one I'm looking for".__ne__, items))
... found = True
... except:
... found = False
现在它在我看来它是使用额外变量的C版本
如果你真的只需要找到的变量集(并且不需要知道该项),那么只需使用
found = any(item=="the one I'm looking for" for item in items)
答案 1 :(得分:3)
由于Python中的for
loops迭代序列而不是条件和变异语句,因此break
必须尽早摆脱困境。换句话说,python中的for
不是条件循环。相当于C ++的for
的Python将是while
loop。
i=0
found=False
while i < 100 and !found:
if items[i] == "the one I'm looking for":
found=True
i += 1
即使在C ++中,for
loops can be rewritten as while
loops如果它们不包含continue
语句。
{
int i = 0;
while (i < 100 && !found) {
if (items[i] == "the one I'm looking for")
found = true;
i++;
}
}
答案 2 :(得分:2)
if
不是在Python中获取else
子句的唯一语句:
for item in items:
if item == "the one I'm looking for":
break
else:
print "Item not found! Run away! Run away!"
return
do_something_with(item)
while
和try
也有else
条款。
答案 3 :(得分:1)
这样的事情?
def search(match, items):
for item in items:
if item == match:
return True
return False
编辑:
def search(match, test, items):
for item in items:
if item == match and test(item) and the_sky_is_not_falling:
return True
return False
答案 4 :(得分:0)
是的,你可以!
>>> found = False
>>> for x in (x for x in range(10) if not found):
... print x
... if x == 5:
... print "Found!"
... found = True
...
0
1
2
3
4
5
Found!
但它很愚蠢,因为即使在找到x之后你继续循环,所以不要这样做。 : - )