【问题标题】:Python filter function - single result [duplicate]Python过滤器函数-单个结果[重复]
【发布时间】:2015-06-16 06:34:48
【问题描述】:

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

例如,我知道我可以做到以下几点:

    resource = list(filter(lambda x: x.uri == uri, subject.resources))[0]

上面将根据资源列表从资源列表中提取资源。虽然这个字段值是唯一的,所以我知道我将有 1 或 0 个结果。 filter 函数将迭代整个列表。就我而言,它有 20 个元素,但我想知道是否有其他内置方法可以在第一次匹配时停止迭代。

【问题讨论】:

    标签: python python-3.x built-in


    【解决方案1】:

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

    下一个(迭代器[,默认])

    通过调用 next() 方法从迭代器中检索下一项。如果给出默认值,则在迭代器耗尽时返回,否则引发 StopIteration。

    例如在你的情况下:

    resource = next(filter(lambda x: x.uri == uri, subject.resources), None)
    

    【讨论】:

    • 我一直在想同样的事情这么久。谢谢:)
    • 这似乎没有彻底回答问题,据说字段值是唯一的,因此开发人员此时期望0或1个对象,这意味着在多条记录的情况下我们应该有一个错误,这个答案不会检测到。我一直在想类似的事情有一段时间了,但这似乎并不能完全解决问题。
    • @tikej 然后是验证,您需要迭代整个列表以获取计数:sum(x.uri == uri for x in subject.resources) 或再次使用next 调用 sn-p 以上。
    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多