繁体   English   中英

选择满足条件的元素

[英]Select an element that satisfies a condition

我想从(很长)列表中选择一个满足条件的特定元素。 在我的特定情况下,列表中的每个项目都是一个类,而我想要的条件是例如item.id == 1。

我开始

[item for item in collection if item.id == 1]

但我不想遍历整个列表,因为我敢肯定只有一个满足条件的元素。

另一个选择是

def check(collection):
    for item in collection:
        if item.id == 1:
            return item

有没有更有效的方法? Python 3是否为此提供了内置功能? 另一个选择可能是预处理列表以获得字典,例如

{item.id : item for item in collection}

您可以使用生成器表达式next()函数

item = next((item for item in collection if item.id == 1), None)

这将找到集合中的第一个匹配元素,如果没有匹配项,则返回None 它不会重复和评估任何超出找到一个元素的严格要求。

但是,如果您确实需要做很多事情,只需创建一次映射,然后查询每次映射将更加有效:

mapping = {item.id: item for item in collection}
item = mapping.get(1)

因为这会将循环限制为仅一次,然后使用O(1)查找性能。 这是内存与速度之间的权衡。

要获得满足条件的第一个元素,请使用忍者的答案中概述的next()

为了获得一个满足条件的元素并检查它是否唯一,我使用以下函数:

def single(seq):
    """Checks that the sequence has a single element and returns it."""
    """Analogous to .Net LINQ's Single()"""
    if hasattr(seq,"__len__"):
        assert len(seq)==1
        return seq[0]
    else:
        i=iter(seq)
        try: value=i.next()
        except StopIteration: raise AssertionError()
        try: i.next()
        except StopIteration: return value
        else: raise AssertionError()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM