टपल्स और सेट्स
आप लिस्ट्स को जानते हैं। Python में दो और संग्रह प्रकार हैं जो उन समस्याओं को हल करते हैं जो लिस्ट्स नहीं कर सकतीं। टपल्स मानों का एक निश्चित समूह रखते हैं जो कभी नहीं बदलेगा। सेट्स केवल अद्वितीय मान रखते हैं और आपको तुरंत सदस्यता की जाँच करने देते हैं, चाहे संग्रह कितना भी बड़ा हो।
टपल्स
टपल मानों का एक क्रमबद्ध समूह है जिसे बनाने के बाद बदला नहीं जा सकता। कोष्ठक टपल को परिभाषित करते हैं, लेकिन वे वैकल्पिक हैं। अल्पविराम ही वास्तव में इसे टपल बनाता है। एकल-आइटम टपल के लिए अंत में अल्पविराम आवश्यक है।
point = (10, 20)
rgb = (255, 128, 0)
dimensions = (1920, 1080)
single = (42,) # एकल-आइटम टपल के लिए अंत में अल्पविराम आवश्यक
also_tuple = 42, 99 # कोष्ठक वैकल्पिक हैं; अल्पविराम इसे टपल बनाता हैइंडेक्स द्वारा एक्सेस बिल्कुल लिस्ट की तरह काम करता है। किसी आइटम को बदलने का प्रयास TypeError उठाता है:
point = (10, 20)
point[0] # 10
point[1] # 20
point[-1] # 20
point[0] = 99 # TypeError: 'tuple' object does not support item assignmentटपल का उपयोग कब करें
टपल का उपयोग तब करें जब आपके पास संबंधित मानों का एक छोटा समूह हो जो एक साथ हो और बदलेगा नहीं। निर्देशांक (x, y), एक रंग (r, g, b), एक नाम-स्कोर जोड़ी ("आरव", 87)। निश्चित संरचना कोड पढ़ने वाले किसी भी व्यक्ति को संकेत देती है कि इस समूह को एक इकाई के रूप में माना जाता है।
locations = {}
locations[(40, -74)] = "New York" # डिक्ट कुंजी के रूप में टपल, काम करता है
locations[[40, -74]] = "New York" # डिक्ट कुंजी के रूप में लिस्ट, TypeErrorअनपैकिंग
अनपैकिंग एक टपल से मानों को निकालती है और प्रत्येक को एक ही पंक्ति में अपने नाम पर असाइन करती है। नामों की संख्या मानों की संख्या से मेल खानी चाहिए। शेष आइटमों को एक लिस्ट में कैप्चर करने के लिए * का उपयोग करें।
point = (10, 20)
x, y = point
print(x) # 10
print(y) # 20
first, *rest = [1, 2, 3, 4, 5]
# first = 1, rest = [2, 3, 4, 5]
head, *middle, tail = [1, 2, 3, 4, 5]
# head = 1, middle = [2, 3, 4], tail = 5नामित टपल्स
नामित टपल एक ऐसा टपल है जहाँ प्रत्येक स्थिति का एक नाम होता है। यह याद रखने के बजाय कि point[0] x-निर्देशांक है, आप point.x लिखते हैं। मान अभी भी अपरिवर्तनीय हैं; आपको बस संख्यात्मक स्थितियों के बजाय पठनीय विशेषता नाम मिलते हैं।
Named tuple import
namedtuple Python की मानक लाइब्रेरी में है लेकिन इसे आयात करने की आवश्यकता है। from collections import namedtuple पंक्ति इस कोर्स में पहला आयात है। आयात Modules अध्याय में पूरी तरह से शामिल हैं।
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
Player = namedtuple("Player", ["name", "score", "level"])
p = Point(10, 20)
p.x # 10
p.y # 20
alice = Player("आरव", 87, 5)
alice.name # "आरव"
alice.score # 87सेट्स
सेट अद्वितीय मानों का एक संग्रह है जिसका कोई गारंटीकृत क्रम नहीं होता। एक ही मान को दो बार जोड़ना कुछ नहीं करता: एक सेट प्रत्येक आइटम की केवल एक प्रति रखता है। आइटम वाले सेट के लिए घुंघराले ब्रैकेट का उपयोग करें, या एक खाली सेट बनाने के लिए set() का उपयोग करें।
tags = {"python", "beginner", "tutorial"}
numbers = {1, 2, 3, 4, 5}
empty = set() # {} नहीं (वह एक खाली डिक्ट है)एक ही मान को दो बार जोड़ने से सेट नहीं बदलता:
tags.add("python") # tags अपरिवर्तित है, "python" पहले से ही इसमें हैसेट का उपयोग कब करें
सेट्स तीन चीज़ों के लिए सही उपकरण हैं: एक लिस्ट से डुप्लिकेट हटाना, यह जल्दी से जाँचना कि कुछ एक बड़े संग्रह में है या नहीं, और दो समूहों की तुलना करना यह देखने के लिए कि वे क्या साझा करते हैं या किसमें भिन्न हैं।
# एक लिस्ट से डुप्लिकेट हटाएँ
raw = ["cat", "dog", "cat", "bird", "dog", "cat"]
unique = list(set(raw)) # ["cat", "dog", "bird"] (क्रम की गारंटी नहीं)# तेज़ सदस्यता जाँच
valid_codes = {"USD", "EUR", "GBP", "JPY"}
code = "EUR"
if code in valid_codes: # तत्काल लुकअप, हज़ारों कोड के साथ भी
print("Valid")सेट संचालन
सेट्स वही संचालन समर्थित करते हैं जो आपने गणित में सीखे: यूनियन (किसी भी सेट में सब कुछ), इंटरसेक्शन (केवल वही जो दोनों सेट साझा करते हैं), और डिफ़रेंस (जो एक में है लेकिन दूसरे में नहीं)। Python इनके लिए ऑपरेटर प्रतीकों का उपयोग करता है, और प्रत्येक का एक विधि समकक्ष है।
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # {1, 2, 3, 4, 5, 6} (यूनियन: किसी भी में सब कुछ)
a & b # {3, 4} (इंटरसेक्शन: केवल दोनों में)
a - b # {1, 2} (डिफ़रेंस: a में लेकिन b में नहीं)
b - a # {5, 6} (दूसरी तरह डिफ़रेंस)
a ^ b # {1, 2, 5, 6} (सिमेट्रिक डिफ़रेंस: एक में लेकिन दोनों में नहीं)इनके विधि रूप भी हैं: .union(), .intersection(), .difference(), .symmetric_difference()।
सेट्स को संशोधित करना
सेट्स परिवर्तनशील हैं। .add() एक आइटम जोड़ता है। .update() किसी भी लिस्ट या अन्य पुनरावृत्य से एक बार में कई जोड़ता है। .remove() एक आइटम हटाता है लेकिन यदि वह वहाँ नहीं है तो त्रुटि उठाता है। .discard() आइटम मौजूद होने पर चुपचाप हटाता है और न होने पर कुछ नहीं करता।
tags = {"python", "beginner"}
tags.add("tutorial") # एक आइटम जोड़ें
tags.update(["web", "api"]) # किसी भी पुनरावृत्य से कई आइटम जोड़ें
tags.remove("beginner") # हटाएँ, न मिलने पर KeyError उठाता है
tags.discard("missing") # हटाएँ, न मिलने पर कोई त्रुटि नहीं
tags.pop() # हटाएँ और एक मनमाना आइटम लौटाएँ
tags.clear() # सब कुछ हटा देंजब आप सुनिश्चित न हों कि आइटम मौजूद है, तो .discard() का उपयोग करें।
फ्रोज़न सेट्स
फ्रोज़न सेट एक ऐसा सेट है जिसे आप बनाने के बाद संशोधित नहीं कर सकते। एक का उपयोग करने का मुख्य कारण: फ्रोज़न सेट्स हैश योग्य हैं, इसलिए उन्हें डिक्शनरी कुंजी के रूप में उपयोग किया जा सकता है या अन्य सेट्स के अंदर संग्रहीत किया जा सकता है।
valid_statuses = frozenset({"active", "paused", "deleted"})
valid_statuses.add("archived") # AttributeError, frozenset अपरिवर्तनीय हैसही संग्रह चुनना
चार प्रकार, प्रत्येक की एक स्पष्ट भूमिका है। पूछें कि आपको डेटा के साथ क्या करने की आवश्यकता है और सही विकल्प आमतौर पर स्पष्ट हो जाता है।
| list | tuple | set | dict | |
|---|---|---|---|---|
| क्रमबद्ध | हाँ | हाँ | नहीं | हाँ (सम्मिलन क्रम) |
| परिवर्तनशील | हाँ | नहीं | हाँ | हाँ |
| डुप्लिकेट | हाँ | हाँ | नहीं | नहीं (कुंजी) |
| एक्सेस द्वारा | इंडेक्स | इंडेक्स | n/a | कुंजी |
| उपयोग करें जब | क्रमबद्ध, परिवर्तनीय अनुक्रम | निश्चित रिकॉर्ड | अद्वितीय मान, तेज़ सदस्यता | कुंजी-मान लुकअप |
एक त्वरित निर्णय नियम:
- नाम से कुछ देखना है? → dict
- एक क्रमबद्ध संग्रह की आवश्यकता है जिसे आप संशोधित करेंगे? → list
- संबंधित मानों का एक निश्चित समूह है? → tuple
- अद्वितीय मान या तेज़ सदस्यता परीक्षण की आवश्यकता है? → set
व्यवहार में
निश्चित रिकॉर्ड संग्रहीत करने के लिए टपल्स और अद्वितीय मानों को ट्रैक करने के लिए एक सेट का उपयोग करना:
home = (28.6139, 77.2090) # अक्षांश, देशांतर
office = (28.5355, 77.3910)
home_lat, home_lon = home
print(f"Home: {home_lat}, {home_lon}")
# एक सेट के साथ अद्वितीय आगंतुकों को ट्रैक करें
visitors = set()
visitors.add("आरव")
visitors.add("राहुल")
visitors.add("आरव") # पहले से सेट में, चुपचाप अनदेखा किया गया
visitors.add("प्रिया")
print(f"Unique visitors: {len(visitors)}")
print(f"आरव visited: {'आरव' in visitors}")
print(f"विकास visited: {'विकास' in visitors}")
