узкое место, вероятно, вызовы функций.Не уверен насчет размеров результатов, которые могут повлиять на производительность посредством управления памятью.Поэтому убедитесь, что понимаете разницу между пониманием списка и выражением генератора.Если здесь проблема с памятью, перейдите к выражению генератора:
res = (fun(x) for fun, x in zip(f, a))