1

私はforループを繰り返して、リスト内のキーワードの一致を探し、一致インデックスを3番目のリストにコンパイルしています。インデックスをリストのリストとしてコンパイルすることはできますが、一致したアイテムごとにサブリストをさらにグループ化したいと思います。

import re, itertools
my_list = ['ab','cde']
keywords = ['ab','cd','de']

indices=[]
pats = [re.compile(i) for i in keywords]
for pat in pats:
    for i in my_list:
        for m in re.finditer(pat, i):
            a =list((m.start(),m.end()))
            indices.append(a)
print(indices)

これは次を返します:

[[0, 2], [0, 2], [1, 3]] 

取得しようとしています:

[[0, 2], [[0, 2], [1, 3]]]

そのため、次のことが明確になります。

[[0, 2], [1, 3]]

上記の例の「cde」に一致するインデックスです。

4

2 に答える 2

2

インデックスを口述にする:

import re, itertools
my_list = ['ab','cde']
keywords = ['ab','cd','de']

indices = {}
pats = [re.compile(i) for i in keywords]
for pat in pats:
    for i in my_list:
        indices.setdefault(i, [])
        for m in re.finditer(pat, i):
            a = list((m.start(),m.end()))
            indices[i].append(a)
print(indices)

与える:

{'cde': [[0, 2], [1, 3]], 'ab': [[0, 2]]}

これはあなたが探しているものですか?

私はしばらくこのコードで遊んでいましたが、itertoolsをインポートするので、このコードを使用して、これらの醜いネストされたforsを取り除くこともできます;)次のように:

import re
from itertools import product

my_list = ['ab', 'cde']
keywords = ['ab', 'cd', 'de']

indices = {}
pats = [re.compile(i) for i in keywords]

for i, pat in product(my_list, pats):
    indices.setdefault(i, [])
    for m in re.finditer(pat, i):
        indices[i].append((m.start(), m.end()))

print(indices)

残念ながら、リスト内包表記を使用して適切に機能するというバクリウの考えを理解することはできません。だから今のところ、これは私にとって最良の解決策のようです。

于 2013-03-27T09:27:45.807 に答える
0

一致ごとにを作成しlist、これに一致を蓄積しlist、最後に結果に追加します。

import re, itertools
my_list = ['ab','cde']
keywords = ['ab','cd','de']

indices=[]
pats = [re.compile(i) for i in keywords]
for pat in pats:
    for i in my_list:
        sublist = []
        for m in re.finditer(pat, i):
            a =list((m.start(),m.end()))
            sublist.append(a)
        indices.append(sublist)
print(indices)

または、リスト内包表記を使用することもできます。

import re, itertools
my_list = ['ab','cde']
keywords = ['ab','cd','de']

indices=[]
pats = [re.compile(i) for i in keywords]
for pat in pats:
    for i in my_list:
        sublist = [(m.start(), m.end()) for m in re.finditer(pat, i)]
        indices.append(sublist)
print(indices)
于 2013-03-27T09:33:11.667 に答える