我有一个清单清单:
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