Понимания не работают таким образом. Концептуально они позволяют устанавливать и фильтровать отдельные элементы списка, а не накапливать их в одной переменной.
Существует стандартная идиома для обхода этого. В основном вы создаете итерацию логических значений для вашего состояния или просто оставляете их для всех элементов, которые хотите, и отбрасываете остальные, затем sum
сверх этого.
В качестве дальнейшего улучшения я бы порекомендовал использовать генераторное выражение вместо понимания списка. Выглядит почти так же, но поддерживает ленивую оценку. Это означает, что вы получаете все преимущества однострочника без необходимости хранить список значений флагов в памяти.
Вот как будет выглядеть первый вариант:
L = [1,2,4,5,7,8,10]
count = sum((x + d in L and x + 2 * d in L) for x in L)
Второй вариант будет выглядеть так:
L = [1,2,4,5,7,8,10]
count = sum(1 for x in L if (x + d in L and x + 2 * d in L))
Обратите внимание, что я переименовал вашу переменную list
в L
, чтобы она не затеняла встроенную функцию.