2013-06-28 112 views
54

我正在學習python,並且我有一個關於初始化集的新手問題。通過測試,我發現了一組能夠像這樣被初始化:使用大括號初始化集

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

有沒有做這種方式的任何缺點,而不是標準的方法:

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

或者是它只是一個風格問題?

+1

該文件確實提到它,只是不存在。請注意,這是不推薦模塊的文檔,* real *集合現在已內置。它位於「Python 2.7新增功能」文檔中,語言參考對其進行了簡要描述:http://docs.python.org/2/reference/expressions.html#set-displays – delnan

+0

@delnan我使用python 2.7,所以我沒有想到看python 3文檔。我發佈的鏈接是2.7,但奇怪的是沒有提到這一點。 – fvrghl

+1

我自編輯我的評論以來,2.7文檔也提到了這一點。您發佈的鏈接已過時,是過去的遺蹟,錯誤,已棄用。忘記它存在並使用它本身告訴您使用的內容:http://docs.python.org/2/library/stdtypes.html#set和http://docs.python.org/2/library/stdtypes 。html#frozenset – delnan

回答

51

有與設置文本語法兩個明顯的問題:

my_set = {'foo', 'bar', 'baz'} 
  1. 這是不可用的Python之前2.7

  2. 有沒有辦法來表達使用語法空集(使用{}創建一個空的字典)

那些可能或者可能對你不重要。

概述此語法的文檔部分是here

16

Python 3 documentation同樣適用蟒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', '{', '}']) 
28

Ç ompare還有一個單詞參數{}set()之間的差異。

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

但兩者ab是一組課程。

+2

中的集合文字方式,這就是爲什麼我想提醒自己設置構造函數爲set( [])'而不僅僅是'set()'。 –

+0

'set()'總是帶一個參數。一個單一的迭代。 –

相關問題