2017-11-24 7 views
0

私はPythonセットで簡単な実験をしています。
私はこの奇妙な(私には少なくとも)行動に気づいた。Python set {}がset([])と等しくない理由は何ですか?

>>> {1,2,3} == set([1,2,3]) 
True 
>>> {1} == set([1]) 
True 
>>> {} == set([]) 
False 
>>> 

なぜ最後のものがFalseであるのですか?
私はそれがむしろ非論理的であることがわかります。

これには理由がありますか?

+0

理由が「良い」かどうかは意見の問題ですが、辞書はセットよりも一般的に使用されるため、理由は「実用的」と言えるでしょう。 :) –

答えて

8

{}は、辞書を作成します。セットではありません。

空のセットリテラルはありません。set()(引数なし)を使用してください。 official Python tutorial on setsから

中括弧やset()機能は、セットを作成するために使用することができます。注:空のセットを作成するには{}ではなくset()を使用する必要があります。後者は、次のセクションで説明するデータ構造である空の辞書を作成します。

および表現のset displays sectionからドキュメント参照:空集合{}で構成することができない

と、このリテラルは空の辞書を構成します。

セットは言語に比較的遅れて追加されます。 {elem1, elem2}を使用してセットを作成するのは、Python 3でのみ導入され、Python 2.7でPython 2に追加されましたが、空の辞書の場合は少なくともが、はるかに長く、少なくとも0.9.2(リリースされた1991)

+1

ありがとう...今私は見る...次のものが真を返すので、すべてが良いです、私は '{x for []} == set([])' –

+0

@ peter.petrov:あります空のリストを渡す必要はなく、 'set()'を使うだけです。 –

関連する問題