1. ホーム
  2. python

[解決済み] set()を{}で置き換えることができるのはなぜですか?

2023-06-30 19:34:48

質問

PyCharmで、以下のように書くと

return set([(sy + ady, sx + adx)])

とあるように 関数呼び出しはセットリテラルに置き換えることができます。 と書いてあるので、それで置き換えています。

return {(sy + ady, sx + adx)}

それはなぜですか?A set() は、Python の辞書である {} ?

また、これを最適化したいのであれば、なぜこの方が効果的なのでしょうか?

どのように解決するのですか?

Pythonの集合と辞書は、どちらも中括弧を使って構築することができます。

my_dict = {'a': 1, 'b': 2}

my_set = {1, 2, 3}

インタープリタ(と人間の読者)は、その内容から両者を区別することができます。 しかし、空集合と空dictを区別することはできないので、この場合は set() を使う必要があります。

非常に簡単なテストでは、リテラル構築の方が高速であることが示されています(python3.5)。

>>> timeit.timeit('a = set([1, 2, 3])')
0.5449375328607857
>>> timeit.timeit('a = {1, 2, 3}')
0.20525191631168127

この質問 は、リストとディクテの場合ではありますが、組み込み関数に対するリテラル構文のパフォーマンスに関するいくつかの問題を扱っています。要約すると、リテラル構文はインタプリタからの作業をより少なくするということです。