Python:将list.index与正则表达式一起使用

时间:2013-10-25 13:33:21

标签: python regex list search indexing

我有一些字符串列表,我想提取一定的值:

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

通常我会通过

查找我要查找的元素的索引
list.index("time taken")

但是由于时间的变化,我想到了使用正则表达式。我只是无法弄清楚如何做到这一点。

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不确定是否有内置方法,但在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)]

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您的首要任务是获得序列中的第一个匹配项,那么只有index()是有用的。 如果您想在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])