हर ज़रूरत के लिए उपयुक्त संरचना चुनें: अपरिवर्तनीय ट्यूपल, O(1) सदस्यता जाँच के लिए सेट, और बार-बार आने वाले पैटर्न के लिए Counter तथा defaultdict।
इस पाठ को Kodokon में खोलेंसही डेटा संरचना चुनना एक ही झटके में पठनीयता और प्रदर्शन, दोनों का मामला सुलझा देता है। ट्यूपल एक अपरिवर्तनीय अनुक्रम है: निश्चित आकार वाले विषम रिकॉर्ड (निर्देशांक, एक कुंजी-वैल्यू जोड़ा) के लिए आदर्श। अपरिवर्तनीय होने का अर्थ है हैशेबल होना (बशर्ते उसकी सामग्री भी हो): इसलिए एक ट्यूपल डिक्शनरी की कुंजी या सेट का तत्व बन सकता है, जो कोई लिस्ट नहीं बन सकती। अनपैकिंग कोड को अभिव्यंजक बनाती है - और जो फ़ंक्शन "कई वैल्यू लौटाता है" वह असल में एक ट्यूपल लौटाता है।
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 जाँचता है, यह अंतर तुरंत दिखाई देता है। सेट के ऑपरेटर (& प्रतिच्छेदन, - अंतर, | संघ) नेस्टेड लूप की तुलना में एक असली उन्नयन हैं: पहचानकर्ताओं की दो लिस्ट की तुलना करना - कौन गायब हुआ, कौन नया है - दो लाइनों में समा जाता है।
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) गायब वैल्यू को मौके पर ही बना देता है: लूप के हर चक्र में कुंजी के अस्तित्व की जाँच किए बिना तत्वों को कुंजी के अनुसार समूहित करने का यह प्रामाणिक साधन है।
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))