我会做这样的事情:
[(i, colour.index(c)) for i, colour in enumerate(colours) if c in colour]
这将返回一个元组列表,其中第一个索引是第一个列表中的位置,第二个索引是第二个列表中的位置(注意:
c您要查找的颜色,即
"#660000")。
对于问题中的示例,返回值为:
[(0, 0)]
如果您只需要懒惰地找到找到颜色的第一个位置,则可以使用以下方法:
next(((i, colour.index(c)) for i, colour in enumerate(colours) if c in colour), None)
这将返回找到的第一个元素的元组,或者
None如果找不到元素(您也可以删除
None上面的参数,
StopIteration如果找不到元素,则将引发异常)。
编辑:正如@RikPoggi正确指出的那样,如果匹配数很高,这将带来一些开销,因为
colour要对其进行两次迭代查找
c。我认为这对于少量匹配并在单个表达式中给出答案是合理的。但是,为避免这种情况,您还可以使用相同的思想定义方法,如下所示:
def find(c): for i, colour in enumerate(colours): try: j = colour.index(c) except ValueError: continue yield i, jmatches = [match for match in find('#660000')]
请注意,由于
find是生成器,因此您可以像上面的示例中那样实际使用它,
next以在第一个比赛时停止并跳过进一步的查找。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)