मॉड्यूल पाठ (3/4)
संग्रह: काउंटर और डिफॉल्टडिक्ट
collections मॉड्यूल विशेष डेटा प्रकार जोड़ता है जो इसका विस्तार करता है
अंतर्निर्मित संग्रह. तीन सबसे अधिक उपयोग किए गए: Counter, defaultdict,
namedtuple.
Counter: आवृत्ति गणना
from collections import Counter
parole = ["mela", "pera", "mela", "kiwi", "mela", "pera"]
c = Counter(parole)
# Counter({'mela': 3, 'pera': 2, 'kiwi': 1})
c["mela"] # 3
c["banana"] # 0 (default for missing keys, NO KeyError)
c.most_common(2) # [('mela', 3), ('pera', 2)]यह स्ट्रिंग्स पर भी काम करता है (वर्णों की गिनती करता है):
Counter("ciao mondo")
# Counter({'o': 2, 'c': 1, 'i': 1, 'a': 1, ' ': 1, 'm': 1, 'n': 1, 'd': 1})यह गिनती (+, -, और, |) पर सेट-जैसे संचालन का समर्थन करता है - बहुत आसान विभिन्न स्रोतों से गणना एकत्र करने के लिए।
defaultdict: स्वचालित डिफ़ॉल्ट के साथ निर्देश
एक निर्देश, जब आप किसी गुम कुंजी तक पहुंचते हैं, तो इसे कॉल करके बनाता है फ़ैक्टरी.
from collections import defaultdict
gruppi = defaultdict(list) # factory = list (empty list)
for nome in ["Ada", "Linus", "Ada", "Grace"]:
gruppi[nome].append(1)
# defaultdict(list, {'Ada': [1, 1], 'Linus': [1], 'Grace': [1]})defaultdict के बिना, आपको लिखना होगा:
gruppi = {}
for nome in [...]:
if nome not in gruppi:
gruppi[nome] = []
gruppi[nome].append(1)सामान्य फ़ैक्टरियाँ: list, int (डिफ़ॉल्ट 0), set, dict।
namedtuple: फ़ील्ड नामों के साथ टुपल्स
अपरिवर्तनीय रिकॉर्ड-वर्ग बनाने का एक हल्का तरीका। यह एक टुपल है, लेकिन नाम से फ़ील्ड पहुंच के साथ।
from collections import namedtuple
Punto = namedtuple("Punto", ["x", "y"])
p = Punto(3, 4)
p.x # 3 (access by name)
p[0] # 3 (access by index, still a tuple)
p.x + p.y # 7
# typical use: return multiple values from a function
def divisione(a, b):
Risultato = namedtuple("Risultato", ["quoziente", "resto"])
return Risultato(a // b, a % b)
r = divisione(17, 5)
r.quoziente # 3
r.resto # 2(अधिक परिष्कृत मामलों के लिए 3.7 से dataclasses भी है - M9 देखें।)
नेमटुपल: हल्के वजन वाले अपरिवर्तनीय रिकॉर्ड
collections मॉड्यूल namedtuple को भी निर्यात करता है, जो आपको कंस्ट्रक्टर या बॉयलरप्लेट विधियों को लिखे बिना संरचित डेटा को संग्रहीत करने के लिए हल्के वर्ग जैसी वस्तुओं को जल्दी से बनाने की सुविधा देता है:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)इसे अजमाएं
सूची `शब्द = ['मेला', 'पेरा', 'मेला', 'कीवी', 'मेला', 'पेरा']` को देखते हुए, एक स्ट्रिंग के रूप में `शीर्ष` में सबसे अधिक बार आने वाले शब्द की गणना करें। `शीर्ष` का मूल्यांकन करें.
संकेत दिखाएँ
काउंटर(...).most_common(1) रिटर्न [(शब्द, गिनती)]।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
छात्रों के `नामांकन = [('एडीए', 'मेट'), ('लिनुस', 'फिसिका'), ('एडीए', 'स्टोरिया'), ('ग्रेस', 'मेट')]` को देखते हुए, `कोर्सेस_पर_स्टूडेंट` को डिफॉल्टडिक्ट (सूची) के रूप में बनाएं। `dict(courses_per_student)` का मूल्यांकन करें।
संकेत दिखाएँ
defaultdict(list) फिर नामांकन में s, c के लिए।
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
\`संग्रह\` से \`काउंटर\` आयात करें। स्ट्रिंग \`text = "abracadabra"\` में वर्णों की आवृत्ति की गणना करें। काउंटर को \`char_counter\` में संग्रहीत करें और उसका मूल्यांकन करें।
संकेत दिखाएँ
काउंटर स्ट्रिंग को एक पैरामीटर के रूप में लेता है और प्रत्येक अक्षर की घटनाओं को गिनता है।
3 प्रयासों के बाद समाधान उपलब्ध है