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

时间:2013-08-26 15:50:31

标签: 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)]

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

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

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

2 个答案:

答案 0 :(得分:6)

使用生成器表达式和next

next((i for i, item in enumerate(l) if item.a is None), None)

如果找不到这样的项目,这将返回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

答案 1 :(得分:4)

try:
    answer = next((val for val in enumerate(l) if val[1].a is None))[0]
except StopIteration:
    # No element matching condition in sequence
    answer = None

这会创建一个生成器对象,因此它只会扩展您当前正在检查的元素,一旦找到匹配的目标,就会在迭代之外发生短路。