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 に答える
-1

リスト内の要素を見つけるには、追加情報 (要素の順序など) がない限り、それを反復処理する必要があります。本当に速くしたい場合は、構造を変更するか、データベースを使用するか、別の言語を使用してください。

于 2013-10-25T13:43:33.957 に答える