Деконструируйте вашу программу, чтобы увидеть, что происходит:
>>> [f() for f in [foo]*3]
foo
foo
foo
[1, 1, 1]
>>>
Вы уже создаете список и переходите к любому и распечатали его 3 раза.
>>> any ([1, 1, 1])
True
Это подается в оператор if:
>>> if any([1, 1, 1]):
... print 'bar'
...
bar
>>>
Решение: передать генератор любому
>>> (f() for f in [foo]*3)
<generator object <genexpr> at 0x10041a9b0>