खाली सेट शाब्दिक?


460

[] = खाली list

() = खाली tuple

{} = खाली dict

क्या एक खाली के लिए एक समान संकेतन है set? या मुझे लिखना है set()?


12
आप {i में []} के लिए स्वीकार नहीं करते, क्या आपने नहीं किया?
उदिमिर

3
बस अजगर के साथ लगभग कुछ भी संभव दिखाना चाहते हैं। यदि आप सेट () का उपयोग किए बिना एक सेट बनाना चाहते हैं, तो आप कर सकते हैं।
उदिमिर

6
हाँ, आप सौ पुष्ट तरीके से बहुत कुछ कर सकते हैं। मैं map(lambda x: x)अपने कोड के उदाहरणों में सिर्फ आपको यह दिखाने के लिए नहीं जोड़ता कि यह या तो काम करता है। यह एक सेट शाब्दिक भी नहीं है, यह सिर्फ एक सेट की समझ है।

130
एक गूंगा तरीका जो काम करता है {0}-{0}। यह उतना स्पष्ट नहीं है set(), लेकिन इसमें मज़ेदार जोड़ी आँखों की तरह दिखने का फायदा है।
विम

10
@ क्रिस {}एक शब्दकोश है। {0}एक सेट है। {0} - {0}एक सेट और खुद के बीच का अंतर है, जो खाली सेट है।
माइकेलवॉल्डन

जवाबों:


520

नहीं, खाली सेट के लिए कोई शाब्दिक वाक्यविन्यास नहीं है। आपको लिखना होगा set()


आपका मतलब है कि खाली सेट के लिए कोई शाब्दिक वाक्यविन्यास नहीं है? या सामान्य रूप से सेट के लिए?
जोहान

15
सेट शाब्दिक हैं, लेकिन केवल पायथन 3.x में। किसी भी तरह से खाली सेट के लिए शाब्दिक नहीं है।

2
@ user763305: इस बिंदु पर भाषा मैनुअल बहुत स्पष्ट है। docs.python.org/library/stdtypes.html#set-types-set-frozenset का कहना है कि "गैर-खाली सेट ... ब्रेसिज़ के भीतर तत्वों की अल्पविराम से अलग सूची रखकर बनाया जा सकता है"
S.L.

43
वास्तव में, सेट शाब्दिकों को पायथन 2.7 के लिए वापस भेज दिया गया है, इसलिए वे केवल पायथन 3 में कड़ाई से उपलब्ध नहीं हैं
जिम ब्रिसोम

13
@ कैंडी यह एक खाली सेट नहीं है - यह एक सेट है जिसमें नंबर 1 है। आपको रास्ते में ट्रेलिंग अल्पविराम की आवश्यकता नहीं है - यह केवल ट्यूपल्स के लिए आवश्यक है।
sepp2k

53

हर तरह से, कृपया set() एक खाली सेट बनाने के लिए उपयोग करें।

लेकिन, यदि आप लोगों को प्रभावित करना चाहते हैं, तो उन्हें बताएं कि आप शाब्दिक रूप से और *Python> = 3.5 ( PEP 448 देखें ) का उपयोग करके एक खाली सेट बना सकते हैं:

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

यह मूल रूप से करने का एक अधिक गाढ़ा तरीका है {_ for _ in ()}, लेकिन, ऐसा न करें।


क्यों?! प्रदर्शन लगभग समान है:$ python3.7 -m timeit 'set()' 2000000 loops, best of 5: 177 nsec per loop $ python3.7 -m timeit '{*()}' 2000000 loops, best of 5: 171 nsec per loop
ओउरेट्स

9
@ogurets, set()(कोड मेंटेनर्स के लिए) समझने में बहुत आसान है, और यह अक्सर प्रदर्शन से अधिक मायने रखता है। {*()}लगभग एक ही अर्थ में "चतुर" लगता है।
बेंजीन

हेह, यह चतुर है।
कोवलस्की

46

बस स्वीकृत उत्तर का विस्तार करने के लिए:

संस्करण 2.7और 3.1अजगर से उपयोग के रूप में setशाब्दिक मिल गया है , लेकिन खुद को अभी भी खाली तानाशाही के लिए उपयोग किया जाता है।{}{1,2,3}{}

पायथन 2.7 (पायथन <2.7 में पहली पंक्ति अमान्य है)

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

अजगर 3.x

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

यहाँ और अधिक: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes


12
यह उत्तर गलत है। खाली सेट का प्रतिनिधित्व करने के लिए अभी भी कोई शाब्दिक वाक्यविन्यास नहीं है। {}.__class__अभी भी देंगेdict
निंजा 420

8
@ Ninja420 टिप्पणी से पहले पहले पढ़ने की कोशिश करें, मैंने देखा है कि
Reishin

3
स्वीकृत उत्तर अभी भी सही है, और पुराना नहीं है। खाली सेट के लिए एक शाब्दिक वाक्यविन्यास नहीं है , हालांकि खाली शब्दकोष के लिए एक है।
एंड्रियाशेसिंग

2
@ AndreasBjørn एक खाली हां के लिए, हालांकि गैर खाली के लिए आपको PEP8 अपवाद और सेट शाब्दिक का उपयोग करने का सुझाव मिलेगा।
रीशिन

वास्तव में, {}.__class__रिटर्न <class 'dict'>'pyt3.6, नहीं के साथ<type 'dict'>
klew

6

यह इस बात पर निर्भर करता है कि आप शाब्दिक तुलना के लिए चाहते हैं, या असाइनमेंट के लिए।

यदि आप एक मौजूदा सेट खाली .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

8
a=set()सेट को खाली नहीं करता है , लेकिन एक नया सेट बनाता है और इसे aकिसी भी पिछले मूल्य को अधिलेखित करने के लिए असाइन करता है ।
गेरिट

वास्तव में। इसलिए मैंने कहा कि यदि आप एक नई वस्तु बनाने से बचना चाहते हैं, तो आपको स्पष्ट () का उपयोग करना चाहिए। मुझे लगता है कि मेरी टिप्पणी को थोड़ा अलग तरीके से लिखा जाना चाहिए था।
ब्रायन मिंटन

यह भी a.clear()विधि का उपयोग कर की तुलना में थोड़ा तेज है a=set(), और जाँच len(a)==0समानता के लिए जाँच करने की तुलना में थोड़ा तेज हैa==set()
ब्रायन मिंटन

3
इसके बजाय if len(a)==0:यह केवल if a: (संपादित करें: या इसके बजाय, if not a:स्थिति की ध्रुवीयता से मेल खाने के लिए ) लिखने के लिए पर्याप्त है (और अधिक पाइथोनिक है )।
जिम ओल्डफील्ड

2

पागल विचारों को जोड़ना: पायथन 3 के साथ यूनिकोड पहचानकर्ताओं को स्वीकार करते हुए, आप एक चर ϕ = frozenset()(03 U + 03D5) की घोषणा कर सकते हैं और इसके बजाय इसका उपयोग कर सकते हैं।


4
समस्या यह है कि setवस्तुएं परस्पर परिवर्तनशील हैं, इसलिए आप अपने आप को जोखिम में डाल रहे हैं spam = ϕ; spam.add("eggs")
ड्रगमैन

3
अगर ϕएक फ्रोज़ेनसेट है, तो spam.add("eggs")विफल रहता है, क्योंकि फ्रोज़ेन्सेट ऑब्जेक्ट में कोई addविधि नहीं है ।
ब्रायन मिंटन

1
@ ब्रायनमिंटन: लेकिन वह अभीष्ट व्यवहार है। ध्यान दें कि जब कोई span = ϕदोनों लिखता है spanऔर ϕएक ही वस्तु को इंगित करेगा, अर्थात id(span) == id(ϕ)। इसलिए, अगर spam.add("eggs")काम करेगा, तो ϕवस्तु अब एक खाली सेट नहीं होगी, और हम मूल समस्या पर वापस आएंगे जैसा कि ड्राइडमैन द्वारा बताया गया है
रेनाटो गार्सिया

1
@RenatoGarcia की तुलना खाली तानाशाही से करें:>>> a={} >>> a['foo']='bar' >>> a {'foo': 'bar'}
ब्रायन मिंटन

1

हाँ। वही अंकन जो खाली-खाली तानाशाही के लिए काम करता है / खाली लोगों के लिए काम करता है।

गैर-खाली dictऔर setशाब्दिक के बीच अंतर पर ध्यान दें :

{1: 'a', 2: 'b', 3: 'c'}- अंदर की-वैल्यू पेयर की संख्या कई बनाती है dict
{'aaa', 'bbb', 'ccc'}- अंदर मूल्यों का एक टपल बनाता हैset

इसलिए:

{}== कुंजी-मान युग्मों की शून्य संख्या == खाली dict
{*()}== मानों का खाली होना == खाली होनाset

हालांकि, तथ्य यह है कि आप यह कर सकते हैं, इसका मतलब यह नहीं है कि आपको करना चाहिए। जब तक आपके पास कुछ मजबूत कारण नहीं हैं, तब तक खाली सेट का निर्माण करना बेहतर होता है, जैसे:

a = set()

नायब : जैसा कि ctrueden देखा टिप्पणी में, {()}है नहीं एक खाली सेट। यह 1 तत्व के साथ एक सेट है: खाली ट्यूपल।


2
{()}खाली सेट नहीं है। यह एक तत्व के साथ एक सिंगलटन सेट है: एक खाली टपल। आप इसे जाँच कर सकते हैं len({()})जो कि 1 होगा, या () in {()}, जो होगा True
ctrueden

1
उफ़, तुम सही हो! मैंने पोस्ट को अपडेट किया: {()}खाली सेट नहीं होने के बारे में नोट जोड़ा , अगर कोई और गलती करता है। धन्यवाद, @ctrueden!
पाइकोडर

-1

पायथन में खाली सेट बनाने के कुछ तरीके हैं:

  1. सेट () विधि का उपयोग करना
    यह अजगर में निर्मित विधि है जो उस चर में खाली सेट बनाता है।
  2. स्पष्ट () विधि (रचनात्मक अभियंता तकनीक LOL) का उपयोग करना
    इस उदाहरण को देखें:

    सेट = {"हाय", "कैसे", "हैं", "आप", "सभी"
    प्रकार (सेट) (यह पंक्ति आउटपुट: सेट)
    सेट .clear ()
    प्रिंट (सेट) (यह लाइन आउटपुट: {})
    टाइप (सेट) (यह लाइन आउटपुट: सेट)

तो, यह खाली सेट बनाने के 2 तरीके हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.