web-dev-qa-db-ja.com

中括弧を使用してPythonのSetを初期化します

私はpythonを学んでおり、セットの初期化について初心者の質問があります。テストを通して、次のようにセットを初期化できることを発見しました。

my_set = {'foo', 'bar', 'baz'}

次の標準的な方法とは対照的に、この方法で行うことには欠点がありますか?

my_set = set(['foo', 'bar', 'baz'])

それとも単にスタイルの問題ですか?

85
fvrghl

Set literal構文には2つの明らかな問題があります。

my_set = {'foo', 'bar', 'baz'}
  1. Python 2.7より前には利用できませんでした

  2. その構文を使用して空のセットを表現する方法はありません({}を使用すると空の辞書が作成されます)

それらはあなたにとって重要かもしれないし、そうでないかもしれません。

この構文の概要を説明するドキュメントのセクションは、 here です。

85
bgporter

{}set()の違いも、1つのWord引数で比較します。

>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'}
>>> b
{'aardvark'}

ただし、abは両方とももちろんセットです。

39
Thruston

Python 3ドキュメントpython 2.7)にも同じことが言えます:

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

python 2.7の場合:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])

{}map/dictにも使用されることに注意してください:

>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'> 

包括的な構文を使用してセットを初期化することもできます。

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])
26
0x90