अजगर में सूची से बाहर सेट का निर्माण कैसे करें?


170

मेरे पास listअजगर में फिल्नामें हैं और मैं setसभी फिल्नामों का निर्माण करना चाहूंगा ।

filelist=[]
for filename in filelist:
    set(filename)

इससे काम नहीं लगता है। यह कैसे कर सकते हैं?

जवाबों:


322

यदि आपके पास हैशनेबल ऑब्जेक्ट्स की सूची है (फ़ाइल नाम शायद स्ट्रिंग्स होंगे, इसलिए उन्हें गिनना चाहिए):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

आप सीधे सेट का निर्माण कर सकते हैं:

s = set(lst)

वास्तव में, किसी भी चलने योग्य वस्तु केset साथ इस तरह काम करेगा ! (महान टाइपिंग बतख नहीं है?)


यदि आप इसे पुनरावृत्त करना चाहते हैं:

s = set()
for item in iterable:
    s.add(item)

लेकिन इस तरह से करने की आवश्यकता शायद ही हो। मैं केवल इसका उल्लेख करता हूं क्योंकि set.addविधि काफी उपयोगी है।


1
मैं 2.7 का उपयोग कर रहा हूं और यह काम नहीं करता है। यहाँ क्या चल रहा है? अजगर 2.7.13 (डिफ़ॉल्ट, जुलाई 24 2017, 14:22:59) [जीसीसी 4.2.1 संगत Apple LLVM 8.1.0 (क्लैंग-802.0.42)] पर डार्विन प्रकार "सहायता", "कॉपीराइट", "क्रेडिट" या अधिक जानकारी के लिए "लाइसेंस"। >>> x = [1,2,3] >>> सेट (x) सेट ([1, 2, 3]) >>>
opus111

@ user1902291-- ऐसा लगता है कि यह काम किया है, आप परिणामी सेट का ट्रैक रखने के लिए सिर्फ y = set(x)
नेक है

यह भी ध्यान दें कि सूची से सेट में आइटम जोड़ना बहुत उपयोगी साबित हो सकता है जब आप सूची से डुप्लिकेट को फ़िल्टर करना चाहते हैं।
प्रांजल कुमार

12

सबसे प्रत्यक्ष समाधान यह है:

 s = set(filelist)

आपके मूल कोड में समस्या यह है कि मान सेट पर असाइन नहीं किए जा रहे थे । यहाँ आपके कोड का निश्चित संस्करण है:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)

9

तुम कर सकते हो

my_set = set(my_list)

या, पायथन 3 के लिए,

my_set = {*my_list}

एक सूची से एक सेट बनाने के लिए। इसके विपरीत, आप भी कर सकते हैं

my_list = list(my_set)

या, पायथन 3 के लिए,

my_list = [*my_set]

एक सेट से एक सूची बनाने के लिए।

बस ध्यान दें कि सूची में तत्वों का क्रम आम तौर पर तब खो जाता है जब सूची को सेट में परिवर्तित किया जाता है क्योंकि एक सेट स्वाभाविक रूप से अनियंत्रित होता है। (हालांकि, CPython में एक अपवाद यह प्रतीत होता है कि सूची में केवल गैर-नकारात्मक पूर्णांक होते हैं, लेकिन मुझे लगता है कि यह CPython में सेट के कार्यान्वयन का परिणाम है और यह व्यवहार अलग-अलग पायथन कार्यान्वयनों के बीच भिन्न हो सकता है।)


4

यहाँ एक और उपाय है:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

इस कोड में मैंने इसे सेट में बदलने के लिए सेट विधि का उपयोग किया है और फिर इसने सूची से सभी डुप्लिकेट मानों को हटा दिया


1

इस तरह से पुनरावृत्त तरीके से सेट करने का एक सामान्य तरीका:

aset = {e for e in alist}

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