私は2つのリストを持っています:
l1 = ['oak', 'tree', ',', 'tree', 'preservation', 'order', 'to', 'be', 'crowned', 'and', 'cleared', 'of', 'deadwood'] l2 = ['tree', 'preservation', 'order']
これらの交点のインデックスを見つける必要があります。結果は単なるリストになり[3,4,5]
ます。
問題は、私が見つけたアルゴリズムが間違った値を返すことです。例えば:
def find_matching_indices(a, b):
for i, x in enumerate(a):
for j, y in enumerate(b):
if x == y:
yield i, j
が返される[(1, 0), (3, 0), (4, 1), (5, 2)]
ため、リスト内のリスト全体ではなく、すべての一致が考慮されます。
collections.deque
のサイズの最大長で使用し、その中にl2
アイテムをキューにl1
入れて、ローリングウィンドウとして機能させることができます。l2
キューの内容が次の内容と一致する場合の長さまで、現在のインデックスとその前のインデックスを出力しますl2
。
from collections import deque
q = deque(maxlen=len(l2))
for i, s in enumerate(l1):
q.append(s)
if list(q) == l2:
print(list(range(i - len(l2) + 1, i + 1)))
この出力:
[3, 4, 5]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加