Как отметили несколько человек в комментариях, причина, по которой ваша функция, выполняющая тест in
, медленнее, чем версия, использующая any
, заключается в том, что эта функция также включает в себя ненужное понимание списка, которое необходимо повторить по всему вводу, прежде чем оператор in
сможет начать поиск совпадения. При запуске по спискам, и in
, и any
могут замкнуть накоротко, выходя раньше, если в начале поиска найдено соответствующее значение. Но понимание списка в вашей второй функции всегда перебирает весь ввод, даже если в самом начале было 1
.
Если вы замените 1 in [num for num in input]
на 1 in input
, вы увидите, что производительность будет лучше или лучше, чем в вашей функции, использующей any
. Производительность была бы довольно схожей, если бы input
был списком, но могла бы быть намного быстрее для других типов контейнеров (таких как set
s и range
s).