2024-10-01 02:17:58 发布
网友
是否有一个内置的python等价物std::find_if来查找给定条件为true的列表的第一个元素?换句话说,类似于list的index()函数,但是有一个任意的一元谓词,而不仅仅是一个等式测试。在
std::find_if
true
index()
我不想使用列表理解,因为我心目中的特定谓词计算起来有点昂贵。在
例如,您有一些谓词函数pred和一个列表lst。 您可以使用itertools.dropwhile来获取lst中的第一个元素, 其中pred返回{},其中
pred
lst
itertools.dropwhile
itertools.dropwhile(lambda x: not pred(x), lst).next()
它跳过pred(x)是False和{}的所有元素 生成pred(x)为True的值。在
pred(x)
False
True
编辑:
用于查找lst中可被5整除的第一个元素的示例
5
利用an answer to a related question的提示,并借用塔拉斯发布的答案,我想到了这个:
>>> lst=[1,2,10,3,5,3,4] >>> next(n for n in lst if n%5==0) 10
稍微修改一下,您将得到索引而不是值:
现在,如果没有匹配项,这将引发一个异常StopIteration。您可能需要使用一个处理异常的函数,如果没有匹配项,则返回None:
None
def first_match(iterable, predicate): try: return next(idx for idx,n in enumerate(iterable) if predicate(n)) except StopIteration: return None lst=[1,2,10,3,5,3,4] print(first_match(lst, lambda x: x%5 == 0))
请注意,这使用的是生成器表达式,而不是列表理解。列表理解将把条件应用到列表的每个成员,并生成一个包含所有匹配项的列表。这会将其应用于每个成员,直到找到匹配项,然后停止,这是解决问题的最小工作量。在
例如,您有一些谓词函数},其中
pred
和一个列表lst
。 您可以使用itertools.dropwhile
来获取lst
中的第一个元素, 其中pred
返回{它跳过}的所有元素
生成pred(x)为
pred(x)
是False
和{True
的值。在编辑:
用于查找
^{pr2}$lst
中可被5
整除的第一个元素的示例利用an answer to a related question的提示,并借用塔拉斯发布的答案,我想到了这个:
稍微修改一下,您将得到索引而不是值:
^{pr2}$现在,如果没有匹配项,这将引发一个异常StopIteration。您可能需要使用一个处理异常的函数,如果没有匹配项,则返回
None
:请注意,这使用的是生成器表达式,而不是列表理解。列表理解将把条件应用到列表的每个成员,并生成一个包含所有匹配项的列表。这会将其应用于每个成员,直到找到匹配项,然后停止,这是解决问题的最小工作量。在
相关问题 更多 >
编程相关推荐