2015-11-14 1 views
3

Может кто-нибудь, пожалуйста, помогите мне с этим?суммировать все элементы в списке, повторяя этот точный список.

(я знаю, что есть встроенный sum() функции, это code является лишь примером для общей проблемы я столкнулся)

def sumlist (lst): 
    sum = 0   
    for i in range(len(lst)): 
     sum = sum + lst[i] 
    return sum 

И я получил эту ошибку:

sum = sum + lst[i] 
TypeError: unsupported operand type(s) for +: 'int' and 'generator' 

Насколько я понял, проблема заключается в том, что i является generator в цикле for, что делает невозможным его добавление к int sum.

Я также попытался sum = sum + int(lst[i]), что приводит к следующему:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'generator' 
+0

@Mykola Я сожалею о отвергнут ваши изменения снова и снова ... –

ответ

1

Вы получили это неправильно. i не является генератором. i - целое число.

lst является генератором в вашем случае. И вы не можете получить доступ к элементам в генераторе, используя индексы.

Одним из простых исправлений было бы преобразование генератора в список перед вызовом sumlist.

Например:

generator_object = (i**2 for i in range(5)) 
print(sumlist(list(generator_object))) 

Другая возможность состоит в том, чтобы перебрать генератор без индексов.

def sumgenerator(generator): 
    sum = 0   
    for element in generator: 
     sum = sum + element 
    return sum 
+0

Это помогло мне много, получил это работает прямо сейчас, написав генератор в список, используя 'список()'. Благодаря!! – Thore

Смежные вопросы