PostgreSQL translates IN (...) to = ANY(ARRAY[...]) internally. They're
largely the same thing.
In theory for small IN lists it could specialize the query into a union
with specialized plans for different values, but it doesn't do that.
Charles is right. For smaller sets use either form, whatever is convenient.
For larger sets create a temp table, COPY to populate it, create indexes on
it if you need to, and join on it.