如何在条件匹配的选择器中获取一项内容?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (5)
  • 关注 (0)
  • 查看 (71)

想从符合条件的列表中获得第一项。生成的方法不能处理整个列表:

def first(the_iterable, condition = lambda x: True):
    for i in the_iterable:
        if condition(i):
            return i

这个函数可以使用如下所示:

>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
提问于
用户回答回答于

itertools模块包含迭代器的筛选函数

from itertools import ifilter

print ifilter((lambda i: i > 3), range(10)).next()
用户回答回答于

对于内置的Python的旧版本:

(x for x in range(10) if x > 3).next()
用户回答回答于

def first(iterable, condition = lambda x: True):
    """
    Returns the first item in the `iterable` that
    satisfies the `condition`.

    If the condition is not given, returns the first item of
    the iterable.

    Raises `StopIteration` if no item satysfing the condition is found.

    >>> first( (1,2,3), condition=lambda x: x % 2 == 0)
    2
    >>> first(range(3, 100))
    3
    >>> first( () )
    Traceback (most recent call last):
    ...
    StopIteration
    """

    return next(x for x in iterable if condition(x))
用户回答回答于

类似于使用ifilter,

>>> (x for x in xrange(10) if x > 5).next()
6

在任何一种情况下,都可能想要抓住StopIteration

>>> foo = None
>>> for foo in (x for x in xrange(10) if x > 5): break
... 
>>> foo
6
用户回答回答于

在Python 2.6或更高版本中:

如果你想StopIteration如果找不到匹配的元素,则可以写成:

next(x for x in the_iterable if x > 3)

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券