2011-05-09 18 views
75

मैं पायथन में सेट का एक सेट बनाने की कोशिश कर रहा हूं। मैं यह नहीं समझ सकता कि इसे कैसे किया जाए।मैं पायथन में सेट्स का सेट कैसे बना सकता हूं?

खाली सेट xx के साथ शुरू:

xx = set([]) 
# Now we have some other set, for example 
elements = set([2,3,4]) 
xx.add(elements) 

लेकिन मैं

TypeError: unhashable type: 'list' 

या

TypeError: unhashable type: 'set' 

यह अजगर में सेट का एक सेट करना संभव है मिल सकता है?

मैं सेट के बड़े संग्रह से निपट रहा हूं और मैं डुप्लिकेट सेट (सेट ए 1, ए 2, सेट सेट का एक सेट बी) को सौदा करने में सक्षम नहीं होना चाहता हूं, अगर एआई दो सेट "रद्द" करेगा = एजे)

उत्तर

15

अंदर frozenset का उपयोग करें।

+7

शायद आप पाइथन में उत्परिवर्तनीय/अपरिवर्तनीय वस्तुओं के बारे में कुछ पॉइंटर्स दे सकते हैं क्योंकि वह नया है? –

+2

@ सेठ: मैं कर सकता था, लेकिन उत्परिवर्तन एक कारक नहीं है। –

+0

बहुत बहुत धन्यवाद! बस फिर से पढ़ें: mutability अब। ऐसा लगता है कि सूचियों का एक सेट भी काम कर सकता है लेकिन फ्रोजनसेट ऐसा लगता है। एक बार फिर धन्यवाद! – Matt

74

पायथन की शिकायत क्योंकि आंतरिक set ऑब्जेक्ट्स उत्परिवर्तनीय हैं और इस प्रकार हैशबल नहीं हैं। समाधान आंतरिक सेट के लिए frozenset का उपयोग करना है, यह इंगित करने के लिए कि आपके पास उन्हें संशोधित करने का कोई इरादा नहीं है।

28

लोग पहले ही उल्लेख आप एक frozenset() साथ ऐसा कर सकते है कि, तो मैं बस प्राप्त करने के लिए कि यह कैसे एक कोड जोड़ देगा:

उदाहरण के लिए आप सूचियों का निम्न सूची से सेट का एक सेट बनाना चाहते हैं:

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]] 

आप निम्नलिखित तरीके से अपने सेट बना सकते हैं:

t1 = set(frozenset(i) for i in t) 
+3

या आप मानचित्र का उपयोग कर सकते हैं! 'सेट (मानचित्र (फ्रोजनसेट, टी))' –

3

तो मैं ठीक उसी समस्या थी। मैं एक डेटा संरचना बनाना चाहता था जो सेट के सेट के रूप में काम करता है। समस्या यह है कि सेट में अपरिवर्तनीय ऑब्जेक्ट्स होना चाहिए। तो, आप क्या कर सकते हैं बस इसे टुपल्स के सेट के रूप में बनाते हैं। यह मेरे लिए ठीक काम किया!

A = set() 
A.add((2,3,4))##adds the element 
A.add((2,3,4))##does not add the same element 
A.add((2,3,5))##adds the element, because it is different! 
+5

टुपल्स में, तत्व ऑर्डर महत्वपूर्ण है। इस प्रकार 'एड ((4,3,2)); A.add ((2,4,3)); एड ((2,3,4)) 'तीन अलग-अलग तत्व जोड़ देगा, जबकि मूल प्रश्न "सेट सेट" के बारे में है, जिसका अर्थ है कि '(2,3,4)', '(4,3, 2) ',' (2,4,3) 'वही हैं। –

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