Количество повторений подстроки в строке
Есть рабочий код нахождения количества повторений подстроки в строке:
def count_substring(string,sub_string):
l=len(sub_string)
count=0
for i in range(len(string)-len(sub_string)+1):
if(string[i:i+len(sub_string)] == sub_string ):
count+=1
return count
if __name__ == '__main__':
string = input().strip()
sub_string = input().strip()
count = count_substring(string, sub_string)
print(count)
Может кто-то подробно объяснить как работает цикл for? Что там происходит и что значит эта запись?:
if(string[i:i+len(sub_string)] == sub_string ):, а именно часть с двоеточием
т.к я не видел в учебниках по питону такого синтаксиса
Спасибо!
Ответы (1 шт):
это называется "срез" и странно, что вы не видели это в учебнике - это база
data[start:end:step]
показывает как резать список (строку и т.д.) data - начиная с позиции start, заканчивая позицией (не включая ее) end и с шагом step
если не указан шаг, он считается равным 1
если не не указан end, он считается равным размеру списка
Например:
data[7:]
сформировать список из всех элементов списка data, начиная с 7
data[:15]
сформировать список из всех элементов списка data, заканчивая 14ым
data[7:15:3]
сформировать список из каждого 3его элемента списка data, начиная с 7 и заканчивая 14ым, т.е. 7, 10, 13
data[::-1]
развернуть список задом наперед - т.е. сформировать список начиная с последнего элемента и заканчивая первым
и т.д.
В вашем случае
string[i:i+len(sub_string)]
означает взять из строки string подстроку размером len(sub_string)], начиная с позиции i