The if statement evaluates everything in a Boolean context, it is like there is an implicit call to the bool() built-in function.
Here is how you would actually check how things will be evaluated by an if statement:
>>> bool([])
False
>>> bool([]) == False
True
See the documentation on Truth Value Testing, empty lists are considered false, but this doesn’t mean they are equivalent to False.
PEP 285 also has some excellent information on why it was implemented this way, see the very last bullet in the Resolved Issues section for the part that deals with x == True and x == False specifically.
The most convincing aspect to me is that == is generally transitive, so a == b and b == c implies a == c. So if it were the way you expected and [] == False were true and '' == False were true, one might assume that [] == '' should be true (even though it obviously should not be in a language without implicit type conversion).