Я пытаюсь воссоздать этот цикл в одной строке:
results = [149, 0, 128, 0, 0, 0, 1, 0, 0, 14, 0, 2]
for x in results:
total = x + total
print(total)
Но когда я делаю это:
y = [total = total + x for x in results]
Я получаю сообщение об ошибке:
y = [total = total + x for x in results]
^
SyntaxError: invalid syntax
Что мне не хватает? Спасибо.
Спасибо. Знаете ли вы, почему мы не можем использовать «=» в списке понимания?
[total = total + x for x in results]
это не список понимания. Синтаксис неверен на =
. Используйте sum()
Поскольку это недопустимый синтаксис для понимания списка
Вам нужно только использовать функцию:
results = [149, 0, 128, 0, 0, 0, 1, 0, 0, 14, 0, 2]
res = sum(results)
print(res)
Или
from functools import reduce
results = reduce(lambda x, y: x + y, results)
print(results)
Если вы настаиваете на использовании понимание списка, я бы сказал, что это хлопотно и ненужно, поскольку это создаст другой список, что в конечном итоге приведет к тому же подходу к использованию функций для получения суммирование в любом случае.
Проблема возникает из-за того, что однострочник в python возвращает массив, у него нет четкого способа обращения к объектам, которые он создает сам.
Вы не можете составить коммутативную сумму, вы можете умножать числа (но каждое из них)
In [2]: y = [x*x for x in results]
In [3]: y
Out[3]: [22201, 0, 16384, 0, 0, 0, 1, 0, 0, 196, 0, 4]
Лучший способ добиться того, чего вы хотите, — это встроенный метод sum
In [9]: sum(results)
Out[9]: 294
использовать
y = sum(results)