私はPythonセットで簡単な実験をしています。
私はこの奇妙な(私には少なくとも)行動に気づいた。Python set {}がset([])と等しくない理由は何ですか?
>>> {1,2,3} == set([1,2,3])
True
>>> {1} == set([1])
True
>>> {} == set([])
False
>>>
なぜ最後のものがFalse
であるのですか?
私はそれがむしろ非論理的であることがわかります。
これには理由がありますか?
私はPythonセットで簡単な実験をしています。
私はこの奇妙な(私には少なくとも)行動に気づいた。Python set {}がset([])と等しくない理由は何ですか?
>>> {1,2,3} == set([1,2,3])
True
>>> {1} == set([1])
True
>>> {} == set([])
False
>>>
なぜ最後のものがFalse
であるのですか?
私はそれがむしろ非論理的であることがわかります。
これには理由がありますか?
{}
は、辞書を作成します。セットではありません。
空のセットリテラルはありません。set()
(引数なし)を使用してください。 official Python tutorial on setsから
:
中括弧や
set()
機能は、セットを作成するために使用することができます。注:空のセットを作成するには{}
ではなくset()
を使用する必要があります。後者は、次のセクションで説明するデータ構造である空の辞書を作成します。
および表現のset displays sectionからドキュメント参照:空集合{}
で構成することができない
と、このリテラルは空の辞書を構成します。
セットは言語に比較的遅れて追加されます。 {elem1, elem2}
を使用してセットを作成するのは、Python 3でのみ導入され、Python 2.7でPython 2に追加されましたが、空の辞書の場合は少なくともが、はるかに長く、少なくとも0.9.2(リリースされた1991)
ありがとう...今私は見る...次のものが真を返すので、すべてが良いです、私は '{x for []} == set([])' –
@ peter.petrov:あります空のリストを渡す必要はなく、 'set()'を使うだけです。 –
理由が「良い」かどうかは意見の問題ですが、辞書はセットよりも一般的に使用されるため、理由は「実用的」と言えるでしょう。 :) –