Найти положение, когда определенная последовательность встречается в строке, используя скользящее окно в Python 2.7. - PullRequest
0 голосов
/ 10 декабря 2011

Если есть список окон

text='abcdefg'
window_list=[text[i:i+3] for i in range(len(text)-3)]
print window_list
['abc', 'bcd', 'cde', 'def']

for i in window_list:
    for j,k in zip(range(len(text)),i):
    print j,k
0 a
1 b
2 c
0 b
1 c
2 d
0 c
1 d
2 e
0 d
1 e
2 f

Я пытаюсь сделать это так, когда

(j==0 and k=='c') and (j==1 and k=='d') and (j==2 and k=='e')

, это даст мне начальную и конечную позиции, где это происходит в строкетекст

так что это даст мне

[2-4]

Ответы [ 3 ]

3 голосов
/ 10 декабря 2011

Думали ли вы сделать это таким образом?

>>> text='abcdefg'
>>> window_list=[text[i:i+3] for i in range(len(text)-3)]
>>> ["-".join([str(i),str(i+len(w))]) for i,w in enumerate(window_list) if w == 'cde'] #for single item
['2-5']
>>> ["-".join([str(i),str(i+len(w))]) for i,w in enumerate(window_list) if w in ['cde','def']] # for multiple items
['2-5', '3-6']
>>> 

Примечание: перечислите список и найдите те элементы, которые соответствуют условию.Возвращает индекс, за которым следует конечная позиция (это индекс + длина подпоследовательности).Обратите внимание, что результатом будет строка, а не то, что вы ожидаете.

2 голосов
/ 11 декабря 2011
import re
seq = 'abcdefabcdefabcdefg'
for match in re.finditer('abc', seq):
    print match.start(), match.end()
0 голосов
/ 11 декабря 2011

Логика:

Все, что вам нужно сделать, это найти, находится ли ваш шаблон в документе или нет. Это можно легко сделать с помощью Python во встроенной строковой функции «find». Как только вы найдете начальную позицию вашей строки, все, что вам нужно сделать, это добавить длину вашего шаблона, чтобы получить конечную позицию. вот и все! работа сделана;)

Код:

text = "abcdefghifjklmnopqrstuvwxyz"
start_position = text.find("abc")
if(start_position>-1):
    end_position = start_position+len(start_position) - 1
else:
    print "Pattern not found"
print start_position, "-", end_position

Выход:

0 - 2

Справка: Проверьте документацию по официальным функциям Python

...