在列表列表中找到项目的索引

在列表列表中找到项目的索引,第1张

在列表列表中找到项目的索引

我会做这样的事情:

[(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
以在第一个比赛时停止并跳过进一步的查找。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存