【发布时间】:2013-04-22 20:49:34
【问题描述】:
有时我有一个列表列表,我需要在所有列表中搜索单个项目。我使用这个 python 代码:
boolean found = false
for(hayStack : listOfHayStacks){
found = findNeedle(hayStack)
if(found)
break;
}
if(!found){
// error case
}
我似乎经常遇到这种情况,我总觉得应该有更好的方法来处理它。
是否存在总结所有结果的:“atLeastOne”结构?
【问题讨论】:
-
我经常遇到这种情况,我使用的方式与您完全相同。如果这里有更好的方法,我也很想知道。虽然您所说的“atLeastOne”构造是什么意思?
-
在 Perl 中:
warn "Didn't find a needle." unless any { findNeedle($_) } @listOfHayStacks;如果您的偏好语言支持某种形式的 lambda 表达式,您可以创建一个类似的结构。但是底层算法是一样的;遍历每个元素,调用 findNeedle,找到一个就停止查找,如果没有找到则处理错误。 -
Calpis ::(来自 FogleBird 的回答)看起来 python 有一个“任何”结构,您可以将其与列表理解结合起来批量测试生成的布尔值。
-
这不是算法问题,答案取决于编程语言或范例。函数式语言通常有一个 find 函数,它产生在任何类型的集合中找到的第一个项目。它们还提供根据是否找到值来调用两个不同的函数表达式(lambda 函数)。但是你提出了你的问题,这是大多数人都会给出的答案。
-
@JimBalter 我可能可以更好地提出这个问题,但我希望得到一些实际上与语言无关的东西(一种以不同方式重写问题的方法)。从下面的答案来看,Python 肯定支持函数式/lambda 表达式,但 Java 可能缺少它(至少在它获得 lambda 支持之前)
标签: java python for-loop foreach