Python过滤功能 - 单个结果

Gia*_*nis 5 python built-in python-3.x

在Python中是否有一个内置函数,它将返回给定列表和验证函数的单个结果?

例如,我知道我可以做以下事情:

    resource = list(filter(lambda x: x.uri == uri, subject.resources))[0]
Run Code Online (Sandbox Code Playgroud)

以上将基于ther resource.uri字段从资源列表中提取资源.虽然这个字段值是uinique,但我知道我要么有1个或0个结果.filter函数将迭代整个列表.在我的情况下它的20个元素,但我想知道是否有一些其他内置方法来停止第一次匹配的迭代.

fer*_*mas 8

请参阅https://docs.python.org/3/library/functions.html#next

next(迭代器[,默认])

通过调用next()方法从迭代器中检索下一个项目.如果给定default,则在迭代器耗尽时返回,否则引发StopIteration.

例如在你的情况下:

resource = next(filter(lambda x: x.uri == uri, subject.resources), None)
Run Code Online (Sandbox Code Playgroud)

  • 这似乎并没有彻底回答问题,据说字段值是唯一的,因此开发人员此时期望 0 或 1 个对象,这意味着如果有多个记录,我们应该会出现错误,而这个答案不会出现错误检测。我已经想知道类似的事情有一段时间了,但这似乎并不能完全解决问题。 (2认同)