Результат правильный. Ваше понимание takewhile кажется ошибочным. Takewhile будет продолжать принимать значения из итерируемого до тех пор, пока вы сначала не выполните условие. Когда это произойдет, это остановится. Так как 1
нарушает условие lambda x: x%2==0
, то выполнение останавливается и возвращается [0]
.
Если вы хотите sh просто отфильтровать значения, вы можете использовать понимание списка или фильтр по мере необходимости.
list(filter(lambda x: x%2==0, range(10))) #OR
[i for i in range(10) if i%2==0]
#output:
[0, 2, 4, 6, 8]