Home › Hindi › Python set Hindi में
Python Set — unique values, तेज़ membership और set operations
🌐 यह page Hindi में है · Read the English guide →
Duplicate अपने आप हटते हैंunion / intersection / differenceO(1) membership5 common गलतियाँ
Set क्या है — एक line में
Set एक unordered collection है जिसमें हर value सिर्फ एक बार रह सकती है। दो बातें इसे list से अलग बनाती हैं: duplicates अपने आप हट जाते हैं, और यह देखना कि कोई item मौजूद है या नहीं — बहुत तेज़ है।
nums = {3, 1, 2, 3, 1}
print(nums) # {1, 2, 3} — duplicates गए, order भी बदल सकता है
print(2 in nums) # True — O(1), list में यह O(n) होता है
print(len(nums)) # 3
Order पर भरोसा मत करो: set का कोई fixed क्रम नहीं होता। अगर क्रम चाहिए तो list रखो, या sorted(my_set) से छाँट लो।
Duplicate हटाना — set का सबसे आम use
names = ["Asha", "Ravi", "Asha", "Meena", "Ravi"]
unique = list(set(names))
print(unique) # ['Meena', 'Asha', 'Ravi'] — order बदल गया!
# order भी चाहिए और unique भी:
seen, out = set(), []
for n in names:
if n not in seen:
seen.add(n)
out.append(n)
print(out) # ['Asha', 'Ravi', 'Meena'] — original order सुरक्षित
यही सबसे बड़ी गलती है: list(set(x)) order खो देता है। Python 3.7+ में list(dict.fromkeys(x)) एक line में order भी बचाता है और duplicates भी हटाता है।
Set operations — यही असली ताकत है
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # union {1,2,3,4,5,6}
print(a & b) # intersection {3, 4}
print(a - b) # difference {1, 2}
print(a ^ b) # symmetric {1, 2, 5, 6}
print(a.issubset({1, 2, 3, 4, 5})) # True
print(a.isdisjoint({9, 10})) # True
# methods वाले नाम भी चलते हैं
print(a.union(b), a.intersection(b), a.difference(b))
असली काम में यह कहाँ आता है: दो files के common users निकालना, एक list में से दूसरी list के items हटाना, या देखना कि क्या कोई permission दी हुई है। हर जगह for loop लिखने के बजाय एक operator काफी है।
Set में क्या रख सकते हैं, क्या नहीं
Set के items hashable होने चाहिए — यानी बदलने योग्य नहीं। इसीलिए list set में नहीं जा सकती:
s = {1, "Asha", (3, 4)} # ✅ number, string, tuple — सब hashable
s.add([1, 2]) # ❌ TypeError: unhashable type: 'list'
s.add((1, 2)) # ✅ tuple चलेगा
नियम याद रखो: immutable = hashable (number, string, tuple, frozenset), mutable = unhashable (list, dict, set)। यही वजह है कि dict की keys भी tuple होती हैं, list नहीं।
अगर आपको immutable set चाहिए — जैसे dict की key बनाने के लिए — frozenset use करो:
fs = frozenset([1, 2, 3])
d = {fs: "permissions"} # ✅ frozenset dict key बन सकती है
fs.add(4) # ❌ AttributeError — frozenset बदलती नहीं
5 common गलतियाँ
- खाली set बनाने के लिए
{}लिखना —{}खाली dict है, खाली set के लिएset()लिखो। - Order पर भरोसा करना — set unordered है;
s[0]परTypeError: 'set' object is not subscriptableमिलेगा। list(set(x))से order खो देना — order चाहिए तोdict.fromkeys(x)use करो।- Loop के अंदर set बदलना —
RuntimeError: Set changed size during iteration; पहलेlist(s)बनाकर उस पर चलो। remove()vsdiscard()—remove()न मिलने परKeyErrorदेता है,discard()चुपचाप आगे बढ़ जाता है।
s = set() # ✅ खाली set
d = {} # यह खाली dict है, set नहीं
s.discard(99) # ✅ कुछ नहीं होता
s.remove(99) # ❌ KeyError: 99
🛠️ Practice करो (free, browser में)
पढ़ना काफी नहीं — यही bug खुद fix करके देखो। नीचे के problems browser में ही चलते हैं, कोई install नहीं, कोई login नहीं।
- Set removes duplicates automatically — set का सबसे बुनियादी behaviour।
- Dictionary keys must be unique — वही uniqueness वाला नियम dict पर।
- Checking membership in a list — in operator — set में यह O(1) है।
- in operator on a list — membership check की practice।
अक्सर पूछे जाने वाले सवाल
List की जगह set कब use करें?
जब duplicates न चाहिए हों, या जब बार-बार यह देखना हो कि कोई item मौजूद है या नहीं। Set में membership check O(1) है जबकि list में O(n) — लाखों items पर यह फर्क साफ़ दिखता है। Order मायने रखता हो तो list ही रखो।
Set में order क्यों नहीं रहता?
क्योंकि set items को उनके hash की वजह से रखता है, insertion order पर नहीं। इसीलिए indexing (s[0]) काम नहीं करती। क्रम चाहिए तो sorted(my_set) लगाओ, या order बचाते हुए duplicates हटाने के लिए dict.fromkeys() use करो।
खाली set कैसे बनाते हैं?
set() लिखकर। {} खाली dict बनाता है, खाली set नहीं — यह सबसे common गलती है। type({}) देता है dict, और type(set()) देता है set।
List set में क्यों नहीं डाल सकते?
क्योंकि set के items hashable होने चाहिए, और list mutable होने की वजह से unhashable है — उसका hash बदल सकता है, जिससे entry खो जाएगी। Tuple डाल सकते हो क्योंकि वह immutable है। वही नियम dict की keys पर भी लागू होता है।