当前位置: 首页 > 面试题库 >

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

高茂
2023-03-14
问题内容

我有一个清单清单:

colours = [["#660000","#863030","#ba4a4a","#de7e7e","#ffaaaa"],["#a34b00","#d46200","#ff7a04","#ff9b42","#fec28d"],["#dfd248","#fff224","#eefd5d","#f5ff92","#f9ffbf"],["#006600","#308630","#4aba4a","#7ede7e","#aaffaa"]]

搜索列表并返回其中一项的位置的最干净方法是什么"#660000"

我已经看过该index方法,但是似乎并没有在列表中解压缩列表。

postion = colours.index("#660000")

给出:ValueError: ['#660000'] is not in list,不是[0][0]我所期望的…


问题答案:

我会做这样的事情:

[(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, j

matches = [match for match in find('#660000')]

请注意,由于find是生成器,因此您可以像上面的示例中那样实际使用它,next以在第一个比赛时停止并跳过进一步的查找。



 类似资料:
  • 问题内容: 我正在尝试通过搜索找到一个。有人知道该怎么做吗? 我看到了,但是我想要类似python的东西。 问题答案: 由于Swift在某些方面要比面向对象的功能更强大(并且Array是结构而不是对象),因此请使用“ find”函数对数组进行操作,该数组将返回可选值,因此请准备处理nil值: Swift 2.0更新: Swift 2.0不再支持旧功能! 使用Swift 2.0,可以使用扩展中定义的

  • 本文向大家介绍sharepoint项目。从列表中检索项目,包括了sharepoint项目。从列表中检索项目的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 如果要尝试在列表中查找某项的索引,则可以采用几种不同的方法来完成,这就是我所知道的最快的方法 另一种方式不是pythonic且速度较慢 第一种方法无疑是更快的方法,但是如果您想更快地进行操作,那该怎么办呢?对于第一个索引使用方法 速度很快,但无法处理多个索引如何加快速度? 问题答案: 假设您想要一个列表作为输出:对于我的测试,所有选项似乎都表现出相似的时间性能,列表理解最快(几乎没有)

  • 我试图通过搜索来查找。有人知道怎么做吗? 我看到有但我想要类似python的。

  • 问题内容: 我正在尝试使用Java 8流和lambda表达式进行顺序搜索。这是我的代码 我知道总是打印第一次出现的索引。如何打印所有索引? 问题答案: 首先,使用Lambdas并不是解决所有问题的方法…但是,即使如此,作为for循环,您也可以编写它: 现在,这没有什么特别的错误,但是请注意,这里的关键方面是索引,而不是值。索引是“循环”的输入和输出。 作为流: 产生输出:

  • 我的目标是从用户输入的“AM”-“PM”字符串格式打印包含24小时十进制格式的进入和退出时间的列表,如以下字符串数组:{6AM#8AM,11AM#1PM,7AM#8PM,7AM#8AM,10AM#12PM,12PM#4PM,1PM#4PM,8AM#9AM} 我在for循环中声明了各个列表,并在循环中为它们赋值,但从代码中得到了以下运行时异常:java。lang.IndexOutOfBoundsEx