Kodokon kodokon.com

उन्नत संरचनाएँ: ट्यूपल, सेट और collections

हर ज़रूरत के लिए उपयुक्त संरचना चुनें: अपरिवर्तनीय ट्यूपल, O(1) सदस्यता जाँच के लिए सेट, और बार-बार आने वाले पैटर्न के लिए Counter तथा defaultdict।

9 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

सही डेटा संरचना चुनना एक ही झटके में पठनीयता और प्रदर्शन, दोनों का मामला सुलझा देता है। ट्यूपल एक अपरिवर्तनीय अनुक्रम है: निश्चित आकार वाले विषम रिकॉर्ड (निर्देशांक, एक कुंजी-वैल्यू जोड़ा) के लिए आदर्श। अपरिवर्तनीय होने का अर्थ है हैशेबल होना (बशर्ते उसकी सामग्री भी हो): इसलिए एक ट्यूपल डिक्शनरी की कुंजी या सेट का तत्व बन सकता है, जो कोई लिस्ट नहीं बन सकती। अनपैकिंग कोड को अभिव्यंजक बनाती है - और जो फ़ंक्शन "कई वैल्यू लौटाता है" वह असल में एक ट्यूपल लौटाता है।

PYTHON
point = (48.85, 2.35)
lat, lon = point

def min_max(values):
    return min(values), max(values)

low, high = min_max([3, 1, 4, 1, 5])
print(low, high)

distances = {("paris", "lyon"): 465}
print(distances[("paris", "lyon")])
अनपैकिंग, एकाधिक रिटर्न और डिक्शनरी की कुंजी के रूप में एक ट्यूपल

सेट अद्वितीयता की गारंटी देता है और औसतन O(1) में सदस्यता जाँच देता है, जबकि किसी लिस्ट में यह O(n) होती है। ऐसे लूप में जो हज़ारों बार x in collection जाँचता है, यह अंतर तुरंत दिखाई देता है। सेट के ऑपरेटर (& प्रतिच्छेदन, - अंतर, | संघ) नेस्टेड लूप की तुलना में एक असली उन्नयन हैं: पहचानकर्ताओं की दो लिस्ट की तुलना करना - कौन गायब हुआ, कौन नया है - दो लाइनों में समा जाता है।

PYTHON
active = {"ada", "linus", "guido"}
banned = {"linus", "mallory"}

print(active & banned)
print(active - banned)
print(active | banned)

emails = ["a@x.io", "b@x.io", "a@x.io"]
unique = set(emails)
print(len(unique))
सेट की संक्रियाएँ और डुप्लिकेट हटाना

collections मॉड्यूल रोज़मर्रा की दो ज़रूरतें पूरी करता है। Counter किसी इटरेबल में घटनाओं की गिनती करता है और most_common(n) उपलब्ध कराता है - अब हाथ से लिखी गिनती वाली डिक्शनरी की ज़रूरत नहीं। defaultdict(factory) गायब वैल्यू को मौके पर ही बना देता है: लूप के हर चक्र में कुंजी के अस्तित्व की जाँच किए बिना तत्वों को कुंजी के अनुसार समूहित करने का यह प्रामाणिक साधन है।

PYTHON
from collections import Counter, defaultdict

words = ["go", "py", "go", "rs", "go"]
counts = Counter(words)
print(counts.most_common(2))

groups = defaultdict(list)
pairs = [("fr", "Ada"), ("us", "Lin"), ("fr", "Zoe")]
for country, name in pairs:
    groups[country].append(name)
print(dict(groups))
गिनने के लिए Counter, समूहित करने के लिए defaultdict

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. किसी लिस्ट के विपरीत, एक ट्यूपल डिक्शनरी की कुंजी क्यों बन सकता है?
    • इसे बनाना तेज़ है
    • यह अपरिवर्तनीय है, इसलिए हैशेबल है
    • इसमें केवल संख्याएँ ही रह सकती हैं
    • डिक्शनरी लिस्ट को ट्यूपल में बदल देती है
  2. आप 100,000 तत्वों पर हज़ारों बार x in collection जाँचते हैं। आपको कौन सी संरचना चुननी चाहिए?
    • एक लिस्ट, जिसे क्रम से स्कैन किया जाए
    • एक सेट, जिसमें सदस्यता औसतन O(1) है
    • एक ट्यूपल, जो लिस्ट से अधिक संहत है
  3. groups = defaultdict(list) के साथ, किसी गायब कुंजी को पढ़ने पर क्या होता है?
    • यह KeyError फेंकता है
    • यह एक खाली लिस्ट लौटाता है और कुंजी को डाल देता है
    • यह डिक्शनरी बदले बिना None लौटाता है