Python:在尊重给定条件的第一个对象的列表中查找位置

Rem*_*i.b 1 python search

我有以下类型的列表:

class Any(object):
    def __init__(self,a,b):
        self.a=a
        self.b=b

l=[Any(1,3),Any(2,4),Any(1,2),Any(None,6),Any('hello',6), Any(1,'ChuckNorris'),Any(1,2)]
Run Code Online (Sandbox Code Playgroud)

l是一个只包含实例的列表Any.我想找到第一个属性a等于'None'的位置.

由于我的列表很长,算法不应该探索整个列表,但是一旦找到条件(在我的示例中,属性a等于None),它就应该停止.

在上面的例子中,这个算法的答案应该是3.

Ash*_*ary 6

使用生成器表达式next:

next((i for i, item in enumerate(l) if item.a is None), None)
Run Code Online (Sandbox Code Playgroud)

None如果没有找到这样的项目,这将返回.

演示:

>>> l=[Any(1,3),Any(2,4),Any(1,2),Any(None,6),Any('hello',6), Any(1,'ChuckNorris'),Any(1,2)]
>>> next((i for i, item in enumerate(l) if item.a is None), None)
3
Run Code Online (Sandbox Code Playgroud)