Вы получаете ошибку, потому что i
- это string
, но индексы должны быть integers
.(Это должно быть ясно из сообщения об ошибке).Изменение части if s[i] ==c:
на if i == c:
сделает ваш код выполненным, но я не думаю, что он даст вам ответ, который вы действительно ищете.
Поскольку вы хотите самый близкий индекс, в котором символ являетсяКак и в случае индекса запроса, я думаю, что вы должны получить список результатов, который должен быть равен len
gth вашего queries
.Ниже приведен код, который может помочь вам достичь этой цели.Я также расширил ваш пример для улучшения понимания.
s = "abcaccba"
queries = [1,3,2,0, 5]
def closest(s, queries):
print('String: ', s)
print('Query: ', queries)
results = []
for query in queries:
c = s[query]
if s[query] in s[query+1 :]:
results.append(('query = {}'.format(query), 'character = {}'.format(c), 'index of next occurrence = {}'.format(1+query+s[query+1 :].index(c))))
#results.append((query, c, 1+query+s[query+1 :].index(c)))
else:
results.append(('query = {}'.format(query), 'character = {}'.format(c), 'index of next occurrence = {}'.format(-1)))
#results.append((query, c, -1))
return results
closest(s = s, queries = queries)
Вот вывод
String: 'abcaccba'
Query: [1, 3, 2, 0, 5]
[('query = 1', 'character = b', 'index of next occurrence = 6'),
('query = 3', 'character = a', 'index of next occurrence = 7'),
('query = 2', 'character = c', 'index of next occurrence = 4'),
('query = 0', 'character = a', 'index of next occurrence = 3'),
('query = 5', 'character = c', 'index of next occurrence = -1')]