Невозможно перебрать список с помощью для l oop in python - PullRequest
0 голосов
/ 12 апреля 2020

моя программа использует findall функцию из библиотеки re для суммирования всех чисел в файле:

fh=open(fname)
lst=re.findall('[0-9]+',fh.read())

findall предположительно возвращает список, верно? так что я должен пройти через него oop следующим образом:

for i in lst :
 s=s+int(lst[i])

, но я получаю ошибку трассировки, которая говорит:

    s=s+int(lst[i])
TypeError: list indices must be integers or slices, not str

Теперь все работает нормально, если я использую range():

for i in range(len(lst))

Я просто не понимаю, почему я получаю этот список ошибок, по умолчанию индексируется целыми числами, верно? может кто-нибудь объяснить мне? спасибо!

Ответы [ 3 ]

3 голосов
/ 12 апреля 2020

У вас есть два способа сделать это:

for i in range(len(lst)):
 s += int(lst[i])

и второй:

for i in lst:
 s += int(i)
1 голос
/ 12 апреля 2020

i - строка, поэтому lst[i] завершается неудачей.

Вы можете преобразовать ее в целое число с помощью lst[int(i)], но это не совсем то, что вы пытаетесь сделать. См. Ответ Иисуса Навина о том, как это исправить.

1 голос
/ 12 апреля 2020

for i in lst: уже удаляет элементы один за другим, и вам не требуется индексировать список. Поэтому попробуйте:

for i in lst :
    s=s+int(i)

Когда вы пытаетесь убрать элементы из списка, for i in lst: выполняет эту работу. Так, например:

lst = [1,2,3,4]
for i in lst:
    print(i)

дает вывод:

1
2
3
4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...