Текущий лучший ответ, включающий метод count
, на самом деле не учитывает перекрывающиеся вхождения и не заботится о пустых подстроках. Например:
>>> a = 'caatatab'
>>> b = 'ata'
>>> print(a.count(b)) #overlapping
1
>>>print(a.count('')) #empty string
9
Первый ответ должен быть 2
не 1
, если мы будем рассматривать перекрывающихся подстроки. Что касается второго ответа, то лучше, если пустая подстрока возвращает 0 в качестве asnwer.
Следующий код позаботится об этих вещах.
def num_of_patterns(astr,pattern):
astr, pattern = astr.strip(), pattern.strip()
if pattern == '': return 0
ind, count, start_flag = 0,0,0
while True:
try:
if start_flag == 0:
ind = astr.index(pattern)
start_flag = 1
else:
ind += 1 + astr[ind+1:].index(pattern)
count += 1
except:
break
return count
Теперь, когда мы запускаем его:
>>>num_of_patterns('caatatab', 'ata') #overlapping
2
>>>num_of_patterns('caatatab', '') #empty string
0
>>>num_of_patterns('abcdabcva','ab') #normal
2
Что вы имеете в виду под «номером подстроки»? Позиция подстроки? Сколько раз происходит подстрока? Что-то другое? – GreenMatt
Это домашнее задание? Если да, добавьте тег «домашнее задание» на свой вопрос. Кроме того, ваш вопрос не очень ясен. Я отвечу на то, что вы спрашиваете, но я подозреваю, что вы действительно хотите узнать что-то еще. –
Следуя предыдущему комментарию, вы можете увидеть: [python: как найти подстроку в другой строке] (http://stackoverflow.com/questions/7361253/python-how-to-find-a-substring-in- другая строка) или [Базовые индексы индексирования подстроки в строке (python)] (http://stackoverflow.com/questions/6987702/basic-indexing-recurrences-of-a-substring-within--string- питон). Поскольку это кажется вероятным дубликатом одного из них, я голосую, чтобы закрыть. – GreenMatt