在python中搜索项目列表的更好方法

时间:2013-04-22 20:49:35

标签: java python for-loop foreach

有时我有一个列表列表,我需要搜索所有列表中的单个项目。我使用这个python代码:

boolean found = false

for(hayStack : listOfHayStacks){
   found = findNeedle(hayStack)

   if(found)
      break;
}

if(!found){
    // error case
}

我似乎经常遇到这种情况,我总觉得应该有一个更好的方法来处理这个问题。

是否有:“atLeastOne”结构总结了所有结果?

3 个答案:

答案 0 :(得分:3)

Python有特殊的语法。

for haystack in haystacks:
    if find_needle(haystack):
        break
else:
    # error case (did not break)

根据您在代码中需要多少逻辑,您还可以执行以下操作:

some_needles_exist = any(find_needle(x) for x in haystacks)
all_stacks_have_needles = all(find_needle(x) for x in haystacks)

答案 1 :(得分:0)

您始终可以创建一个单独的函数,在该函数中使用double for循环。它可能更具可读性:

for (hayStack : listOfHayStacks) {
    for (needle : hayStack) {
        if needle satisfies criteria
            return true
    }
}
return false
搜索所有草垛的问题是,如果你可以在最初的几个草堆中返回,你可能会浪费很多时间。

答案 2 :(得分:0)

如果你更专注于在大海捞针找到或不找到针头的行动那么你可以做这样的事情:

>>> criteria = lambda n: n == 3
>>> def found(needle):
    if criteria(needle):
        print("Doing something as found")
        return True
    else: return False


>>> def missed():
    print("Doing missed action")
    return False

>>> wasfound = any(found(i) for i in range(2)) or missed()
Doing missed action
>>> wasfound
False
>>> wasfound = any(found(i) for i in range(4)) or missed()
Doing something as found
>>> wasfound
True
>>>