用于循环和多个条件

时间:2011-05-26 04:39:18

标签: python loops conditional-statements

在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循环中使用多个条件。

感谢。

5 个答案:

答案 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)

whiletry也有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之后你继续循环,所以不要这样做。 : - )