Python: недопустимая синтаксическая ошибка понимания списка - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь воссоздать этот цикл в одной строке:

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  

Чего мне не хватает?Спасибо.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Проблема возникает из-за того, что однострочный в 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
1 голос
/ 28 мая 2019

Вам нужно только использовать функцию:

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)

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

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