2016-04-17 7 views
19

PyCharm में, जब मैं लिखने:{} के साथ सेट() को प्रतिस्थापित करना क्यों संभव है?

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

यह "समारोह कॉल सेट शाब्दिक साथ बदला जा सकता" कहते हैं तो इसके साथ यह बदल देता है:

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

कि क्यों है? पाइथन में set() एक शब्दकोश {} के समान नहीं है?

और यदि यह इसे अनुकूलित करना चाहता है, तो यह और अधिक प्रभावी क्यों है?

+2

ध्यान रखें कि आपका शीर्षक के बावजूद, आप ** ** जगह ले सकता है नहीं 'set()' '' {} के साथ है, लेकिन आप * * एक गैर खाली 'सेट ((1, 2, 3 की जगह ले सकता)) '' शाब्दिक '{1, 2, 3} 'के साथ, क्योंकि अब यह स्पष्ट है कि एक शब्दकोश नहीं है। Https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset – jonrsharpe

उत्तर

31

अजगर सेट और शब्दकोशों दोनों घुंघराले ब्रेसिज़ का प्रयोग कर बनाया जा सकता है:

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

my_set = {1, 2, 3}

दुभाषिया (और मानव पाठकों) के आधार पर उन दोनों के बीच भेद कर सकते हैं उनके सामग्री। हालांकि खाली सेट और रिक्त स्थान के बीच अंतर करना संभव नहीं है, इसलिए इस मामले को आपको set() का उपयोग खाली सेट के लिए खाली सेट के लिए करने की आवश्यकता है।

एक बहुत ही साधारण परीक्षण पता चलता है कि शाब्दिक निर्माण तेजी से (python3.5) है:

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

This question निर्मित कार्यों पर शाब्दिक निर्माण, सूचियों और dicts के लिए यद्यपि के प्रदर्शन के कुछ मुद्दे शामिल हैं। सारांश ऐसा लगता है कि शाब्दिक निर्माण के लिए दुभाषिया से कम काम की आवश्यकता होती है।

+0

देखें शाब्दिक निर्माण शायद तेज़ है क्योंकि आप मध्यवर्ती सूची नहीं बनाते हैं; क्या होगा यदि आप इसे कारक करते हैं? – jonrsharpe

+1

@jonrsharpe अभी भी धीमा लगता है: 'timeit.timeit (stmt = 'a = set (mylist)', setup = 'mylist = [1, 2, 3]') -> 0.3987466390244663' - मुझे लगता है कि मैंने जो लिंक जोड़ा है वह कुछ शामिल है इस का। – snakecharmerb

+0

अच्छा, जांच के लिए धन्यवाद। – jonrsharpe

4

यह के लिए set()

>>> a = {1, 2} 
>>> b = set() 
>>> b.add(1) 
>>> b.add(2) 
>>> b 
set([1, 2]) 
>>> a 
set([1, 2]) 
>>> a == b 
True 
>>> type(a) == type(b) 
True 

dict वाक्य रचना एक वैकल्पिक वाक्य रचना है अलग है। इसमें कुंजी-मूल्य जोड़े होते हैं। उदाहरण के लिए:

my_obj = {1:None, 2:None} 
1

set([iterable]) वैकल्पिक पुनरावर्तनीय iterable से सेट बनाने के लिए निर्माता है। और {} सेट/dict ऑब्जेक्ट अक्षर बनाने के लिए है। तो क्या बनाया गया है इस पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं।

In [414]: x = {} 

In [415]: type(x) 
Out[415]: dict 

In [416]: x = {1} 

In [417]: type(x) 
Out[417]: set 

In [418]: x = {1: "hello"} 

In [419]: type(x) 
Out[419]: dict 
संबंधित मुद्दे

 संबंधित मुद्दे