web-dev-qa-db-ja.com

空集合リテラル?

[] = empty list

() = empty Tuple

{} = empty dict

空のsetに対して同様の表記法はありますか?それともset()と書く必要がありますか?

383
Johan Råde

いいえ、空集合のリテラル構文はありません。 set()を書く必要があります。

424
sepp2k

受け入れられた答えを拡張するためだけに:

バージョン2.73.1から、pythonは使用法{}の形でsetリテラル{1,2,3}を得ましたが、{}自体はまだ空の辞書に使われています。

Python 2.7(最初の行はPython <2.7では無効です)

>>> {1,2,3}.__class__
<type 'set'>
>>> {}.__class__
<type 'dict'>

Python 3.x

>>> {1,4,5}.__class__
<class 'set'>
>>> {}.__class__
<type 'dict'>

もっとここに: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes

40
Reishin

ぜひ、空の集合を作るためにset()を使ってください。

しかし、人々を感動させたい場合は、Python> = 3.5でリテラルと*を使用して空のセットを作成できることを伝えてください( PEP 448 を参照)することによって:

>>> s = {*()}  # or {*{}} or {*[]}
>>> print(s)
set()

これは基本的に{_ for _ in ()}のより簡潔な方法ですが、しないでください。

それはあなたが比較のためにリテラルを欲しいのか、それとも代入のために欲しいのかによって異なります。

既存のセットを空にしたい場合は、特に新しいオブジェクトを作成したくない場合は.clear()メソッドを使用できます。比較したい場合は、set()を使うか、長さが0かどうか確認してください。

例:

#create a new set    
a=set([1,2,3,'foo','bar'])
#or, using a literal:
a={1,2,3,'foo','bar'}

#create an empty set
a=set()
#or, use the clear method
a.clear()

#comparison to a new blank set
if a==set():
    #do something

#length-checking comparison
if len(a)==0:
    #do something
4
Brian Minton

狂った考えに加えて:Python 3がUnicode識別子を受け付けるようにしたなら、あなたは変数ϕ = frozenset()(ϕはU + 03D5)を宣言して代わりにそれを使うことができます。

2
Renato Garcia

空のセットを初期化したい場合は、以下のコードを適用してください。これは私にとってPython 3で完璧に動作します。

object = set([])
object = object.union([1,2,3,4]) #set operation.
1
bhargav patel