簡體   English   中英

Python:將list.index與正則表達式一起使用

[英]Python: Use list.index with regular expression

我有一些要提取某個值的字符串列表:

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

通常我會尋找我要尋找的元素的索引

list.index("time taken")

但是隨着時間的變化,我考慮使用正則表達式。 我只是不知道如何做到這一點。

那么,如何找出與某個正則表達式匹配的列表元素的索引,例如re.match()? (如果不遍歷列表,這將花費很長時間)

不確定是否有內置方法,但是通過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)]

您可以使它返回第一個找到的索引或最后一個找到的索引,這取決於該方法或在一種方法中對其進行了參數化以提供靈活性。

要在列表中查找元素,除非您有其他信息(例如元素順序),否則必須對其進行遍歷。 如果您確實想更快地運行,請更改結構,使用數據庫或使用其他語言。

正則表達式解決方案需要按順序進行迭代。 如果要獲取帶有某些前綴或后綴的字符串,則應實現Trie,這是解決問題的最快方法。 同樣,您也可以使用不同長度的循環哈希來實現解決方案,但是在某些情況下,它是無效的。

如果您的首要任務是獲得序列中的第一個匹配項,那么只有index()才有用。 如果您想在index()方法中使用regex,就可以這樣做

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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM