Python の真偽値

Python 数値型の 0、空文字列、空タプル、空リスト、空辞書のみ偽。

None と False が入ってねー、とか思ってリンクしてある日本語ドキュメントを参照。

ブール演算のコンテキストや、式が制御フロー文中で使われる最には、 以下の値: None 、すべての数値型におけるゼロ、空のシーケンス (文字列、 タプル、およびリスト) 、空のマップ型 (辞書) 、は偽 (false) であると 解釈されます。それ以外の値は真 (true) であると解釈されます。

None はちゃんと書いてあるから「きちんと書いてくれ」とつっこむところだが*1、よくみると False が抜けている。
日本語ドキュメントの間違いかと思えば、オリジナルの英文ドキュメントも 2.4.1 まではこの記述。

In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: None, numeric zero of all types, empty sequences (strings, tuples and lists), and empty mappings (dictionaries).

2.4.2以降のドキュメントにはちゃんと False が登場する(別に 2.4.2 で True/False が導入されたわけではなく以前からある)。
正しいのはこっち。

In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: False, None, numeric zero of all types, and empty strings and containers (including strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as true.

ということで、Python で偽になるのは False、 None、 数値の 0、空文字、空のコンテナ(string、list、tuple、set、frozenset、dict など)ということでお願いしたい。

追記

hoge さんからコメントで __nonzero__ メソッド が False/0 を返すオブジェクトも偽と評価されるとの指摘をいただいた。

__nonzero__( self)
真値テストや組み込み演算 bool() を実現するために呼び出されます; False または True か、等価な整数値 0 または 1 を返さなければなりません。 このメソッドが定義されていない場合、__len__() (下記参照) が定義されていれば呼び出されます。__len__() と __nonzero__() のどちらもクラスで定義されていない場合、 そのクラスのインスタンスはすべて真の値を持つものとみなされます。

ふむ。オブジェクトを真偽値評価する場合、__nonzero__ か __len__ が使われ、どちらも無ければ自動的に真になると。
いちおう試す。

>>> class Foo:
...   def __nonzero__(self): return False
...
>>> bool(Foo())
False
>>> if Foo(): print "True"
...
>>>

たしかに。上記の偽になるオブジェクトの例も None 以外はこの規則に従っている。最終的にこういう単純なルールになっているのが Python って感じだな。

*1:Pythonを知らないとスルーしてしまうのも分かる気もするが