Получил ValueError, когда значение находится в списке - PullRequest
0 голосов
/ 15 марта 2020

Изначально моей задачей было создать функцию, которая будет находить последний индекс самого длинного слова в строке, предполагая, что строка может быть очень длинной. Еще одно ограничение: функция не должна делать никаких копий слов.

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 Приложено полное сообщение об ошибке

1 Ответ

0 голосов
/ 15 марта 2020

EDITED - избавьтесь от необязательного аргумента метода index из оператора return и используйте метод index в обращенном списке, а затем преобразуйте индекс относительно исходного списка:

return res.index(max(res), -1)

до

l.reverse()
return len(l) - 1 - l.index('l')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...