Python函数“find”?

2024-04-25 23:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个函数,它能够迭代集合,调用一个提供的函数,将集合的元素作为参数,并在从提供的函数接收到“True”时返回参数或它的索引。在

是这样的:

def find(f, seq, index_only=True, item_only=False):
     """Return first item in sequence where f(item) == True."""
     index = 0
     for item in seq:
         if f(item):
             if index_only:
                 return index
             if item_only:
                 return item
             return index, item
         index+= 1
     raise KeyError

所以我想知道在standartpython工具集中是否有类似的东西?在


Tags: 函数infalsetrue元素only参数index
3条回答

您可以使用itertools.dropwhile跳过提供的函数返回False的项,然后获取其余项中的第一项(如果有的话)。如果您需要索引而不是项,请合并^{} docs的配方部分中的enumerate。在

要反转由提供的函数返回的真值,请使用lambdalambda x: not pred (x),其中pred是提供的函数)或命名包装:

def negate(f):
    def wrapped(x):
        return not f(x)
    return wrapped

示例:

^{pr2}$

如果找不到匹配的项,这将抛出StopIteration;将它包装在自己的函数中以引发您选择的异常。在

我不认为有任何这样的函数具有如此精确的语义,不管怎样,你的函数很短,足够好,你可以很容易地改进它以备以后使用,所以请使用它。在

因为简单总比复杂好。在

尝试itertools,例如ifilter。在

相关问题 更多 >

    热门问题