ВНИМАНИЕ! Это неправильное решение!
Это сумма четных по счету элементов ряда фиббоначчи.
a = 1
b = 2
s = b
while b < 4*10**6:
a = a + b
b = a + b
s += b
print(s)
А если четные (по значению) элементы складывать, то нужно так:
s, a, b = 0, 1, 2
while b < 4*10**6:
if b % 2 == 0:
s += b
a, b = b, a + b
print(s)
А ваше решение из вопроса неэффективно. Оно сначала строит список из всех элементов ряда, не превышающих заданного. Потом фильтрует их по четности, благо лениво и не требуется лишней памяти. Ну и суммирует фильтрат. Итого у этого алгоритма O(2*N) сложность по памяти и по столько же по операциям.
Предложенный выше алгоритм -- O(1) по памяти и O(N) по операциям.
И на старуху бывает проруха. Ага. невнимательность.