Изначально моей задачей было создать функцию, которая будет находить последний индекс самого длинного слова в строке, предполагая, что строка может быть очень длинной. Еще одно ограничение: функция не должна делать никаких копий слов.
def find(x: str) -> int:
len = 0
res = []
flag = False
strip = ' \n\r\v\t\f'
for el in x:
if el in strip:
if flag:
if len:
res.append(len)
len = 0
flag = False
pass
else:
if not flag:
flag = True
len += 1
else:
len += 1
if flag:
res.append(len)
print(res, max(res), max(res) in res, sep='\n' ) #this is for testing
return res.index(max(res), -1)
Все должно быть в порядке, но ValueError происходит, когда я пытаюсь напечатать это:
print(find(' a b 21231 21 21 1 22122 12c'))
-------------
[1, 1, 5, 2, 2, 1, 5, 3]
5
Traceback (most recent call last):
File "C:/Users/*****/Documents/Навчання/Прога/22/32b.py", line 45, in <module>
print(find(' a b 21231 21 21 1 22122 12c'))
File "C:/Users/*****/Documents/Навчання/Прога/22/32b.py", line 23, in find
return res.index(max(res), -1)
True
ValueError: 5 is not in list
Process finished with exit code 1
Я не уверен, что это было вызвано сборщиком мусора.
Но иногда это работает:
print(find(' 123 123 sad'))
-------------
[3, 3, 3]
3
True
2
Я мог бы go по-другому с перевернутыми списками, но первый меня очень беспокоит.
PS Приложено полное сообщение об ошибке