3

我有我想提取某个值的字符串列表:

["bla","blabla","blablabla","time taken to build model: 5.1 seconds", "blabla"]

通常我会寻找我正在寻找的元素的索引

list.index("time taken")

但由于时间变化,我想到了使用正则表达式。我只是不知道该怎么做。

那么如何找出与某个正则表达式匹配的列表元素的索引,例如 re.match()?(如果不遍历列表,这将需要很长时间)

4

4 回答 4

3

不确定是否有内置方法,但很容易通过列表推导O(n)及时做到这一点。

使用正则表达式:

import re
your_list = ["bla","blabla","blablabla","time taken to build model: 5.1 seconds", "blabla"]
regex = re.compile("^time taken")
idxs = [i for i, item in enumerate(your_list) if re.search(regex, item)]

并且没有正则表达式:

your_list = ["bla","blabla","blablabla","time taken to build model: 5.1 seconds", "blabla"]
query_term = 'time taken'
idxs = [i for i, item in enumerate(your_list) if item.startswith(query_term)]

您可以使其返回第一个找到的索引或最后一个找到的索引,具体取决于或在方法中对其进行参数化以提供灵活性。

于 2016-05-11T04:01:20.810 回答
0

正则表达式解决方案需要遍历序列。如果你想得到带有一些前缀或后缀的字符串,你应该实现Trie它是问题的最快解决方案。您也可以使用不同长度的循环哈希来实现解决方案,但在某些情况下它会效率不高。

于 2013-10-25T13:51:04.753 回答
0

如果您的优先级是在序列中获得第一个匹配项,那么 onlyindex()很有用。如果你想在index()方法中使用正则表达式,你就是这样做的

lst=["bla","blabla","blablabla","time taken to build model: 5.1 seconds", "blabla"]

lst.index([i for i in lst if re.findall(r'^time taken', i)][0])
于 2019-04-03T14:10:07.440 回答
-1

要在列表中查找元素,除非您有额外的信息(例如元素的顺序),否则您必须遍历它。如果您真的想更快,请更改结构,使用数据库或使用另一种语言。

于 2013-10-25T13:43:33.957 回答