相关疑难解决方法(0)

从与条件匹配的iterable中获取第一个项目

我想从符合条件的列表中获取第一项.重要的是,生成的方法不会处理整个列表,这可能非常大.例如,以下功能就足够了:

def first(the_iterable, condition = lambda x: True):
    for i in the_iterable:
        if condition(i):
            return i
Run Code Online (Sandbox Code Playgroud)

这个函数可以用这样的东西:

>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
Run Code Online (Sandbox Code Playgroud)

但是,我想不出一个好的内置/单线来让我这样做.如果我不需要,我不特别想复制这个功能.是否有内置方法可以使第一个项目符合条件?

python iterator

264
推荐指数
11
解决办法
15万
查看次数

查找与谓词匹配的序列中的第一个元素

我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素.

目前的代码非常难看:

[x for x in seq if predicate(x)][0]
Run Code Online (Sandbox Code Playgroud)

我想过把它改成:

from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Run Code Online (Sandbox Code Playgroud)

但是必须有一些更优雅的东西...... None如果没有找到匹配,如果它返回一个值而不是引发异常会很好.

我知道我可以定义一个函数:

def get_first(predicate, seq):
    for i in seq:
        if predicate(i): return i
    return None
Run Code Online (Sandbox Code Playgroud)

但是开始使用像这样的实用程序函数来填充代码是非常无味的(并且人们可能不会注意到它们已经存在,所以如果存在已经提供相同的内置函数,它们往往会随着时间的推移而重复).

python predicate

149
推荐指数
4
解决办法
8万
查看次数

在Python中查找满足谓词的元素的索引

我正在寻找 Python 中的内置/库函数或方法,用于在列表中搜索满足谓词的特定元素并返回索引。我正在寻找一个内置函数,因为我觉得这应该在 Python 库中。

它类似于,eg[(10, 1), (20, 2), (30, 3)].index((30, 3))返回 2,但我想要一个自定义比较函数,例如,我只想匹配前面示例中元组的第一个元素。

我正在寻找的函数本质上是这样做的:

def custom_index(l, f):
    for i, e in enumerate(l):
         if f(e): return i
    return -1 # or something else to indicate not found
Run Code Online (Sandbox Code Playgroud)

用法:

custom_index([(10, 1), (20, 2), (30, 3)], lambda x: x[0]==30) -> returns 2
Run Code Online (Sandbox Code Playgroud)

python

12
推荐指数
1
解决办法
4362
查看次数

标签 统计

python ×3

iterator ×1

predicate ×1