Почему моя переменная индекса не выполняет итерацию моего списка правильно? - PullRequest
0 голосов
/ 03 июня 2019

Я написал небольшой фрагмент кода для перебора списка и суммирования содержимого (я знаю, что есть встроенная функция, но хотел сделать это из любопытства).

list = [14, 42, 100, 15, 8, 16, 104, 8, 41, 5, 15, 10]    
index = 1
result = list[0]
for range in (0, len(list)):
    result = result + list[index]
    index = index + 1
print(result)

По какой-то причине индексная переменная повторяется до «3» и просто останавливается. Спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 03 июня 2019

Почему?

Поскольку for range in (0, len(list)) будет повторять только два раза:

  1. Со значением 0.
  2. Со значением len(list), равным 12.

Итак, вы заканчиваете тем, что добавляете в список только первые 3 элемента.

# Wrong code
result = list[0]
for range in (0, len(list)):
    result = result + list[index]
    index = index + 1

# 14 + 42 + 100 = 156

Исправлено :

lst = [14, 42, 100, 15, 8, 16, 104, 8, 41, 5, 15, 10]

result = 0    
for i in range(len(lst)):
    result = result + lst[i]

print(result)

Подробнее Pythonically :

lst = [14, 42, 100, 15, 8, 16, 104, 8, 41, 5, 15, 10]

result = 0    
for x in lst:
    result += x

print(result)

Короче :

sum(lst)

Примечание -

Не называйте:

  • ваш список как list, поскольку он затеняет встроенный список .

  • ваша переменная как range, поскольку она затеняет встроенный диапазон .

1 голос
/ 03 июня 2019

это действительно просто.

summ = 0
for i in range(len(list)):
    summ += list[i]

Ваш цикл for просто неверен. Вы перебираете элементы кортежа с двумя элементами, плюс одна сумма до трех ...

0 голосов
/ 03 июня 2019

Альтернативное решение: если вы хотите получить индекс и значение каждого элемента одновременно, более элегантное решение использует enumerate (). Это позволяет нам не беспокоиться о len и увеличивать индекс

Примечание: Мы не используем индекс ниже, хотя

lst = [14, 42, 100, 15, 8, 16, 104, 8, 41, 5, 15, 10]

result = 0    
for i, num in enumerate(lst):
    result += num

print(result)
0 голосов
/ 03 июня 2019

Вы перебираете кортеж с двумя элементами, 0 и len(list).Вы должны использовать диапазон, чтобы получить диапазон для всех чисел от 0 до len(list):

result = list[0]
for index in range(1, len(list)):
    result = result + list[index]

, но вы должны перебирать элементы списка напрямую:

numbers = [14, 42, 100, 15, 8, 16, 104, 8, 41, 5, 15, 10]    
result = 0
for number in numbers:
    result += number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...