#python #python-3.x #window #substring #enumerate
#python #python-3.x #окно #подстрока #перечислять
Вопрос:
проблема заключается в том, что мне нужно найти минимальное окно подстроки в строке, что я могу сделать. прямо сейчас у меня есть это:
sub = "rth"
str = "zrwhqtho"
first_letter = sub[0]
last_letter = sub[-1]
start = None
end = None
letters = [let for let in str]
for i, letter in enumerate(letters):
if letter == first_letter:
start = i
if letter == last_letter:
end = i
if start and end:
print(f"From %s to %s." % (start 1, end 1))
он выводит «От 2 до 7». проблема здесь в том, что в основной строке есть 2 буквы h, и программа принимает ту, которая идет после t . как мне сделать так, чтобы она принимала только первое вхождение буквы вместо последней буквы?
Ответ №1:
Прежде всего, вызовите переменную как-то иначе, чем str
, поскольку таким образом вы перезаписываете встроенное ключевое слово. Я переименовал его в string
.
Обратите внимание, что start and end
False
if first_letter
— это первая буква в string
, т.Е. с индексом 0, значение start == 0 == False
.
Самое простое решение — использовать встроенную функцию str.find
: https://docs.python.org/3/library/stdtypes.html#str.find
sub = "rth"
string = "zrwhqtho"
first_letter = sub[0]
last_letter = sub[-1]
start = string.find(first_letter)
if start != -1: # string.find returns -1 if first_letter is not found
end = string.find(last_letter, start)
# Only checks the string after start, ensures that end > start
else:
end = -1
if end != -1:
# End is -1 only if either first_letter is not in the string, or there is no last_letter in the string after first_letter
print(f"From %s to %s." % (start 1, end 1))