முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 8 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 31/36~12 min
தொகுதி பாடங்கள் (3/4)

சேகரிப்புகள்: எதிர் மற்றும் இயல்புநிலை

collections தொகுதி சிறப்பு தரவு வகைகளைச் சேர்க்கிறது உள்ளமைக்கப்பட்ட சேகரிப்புகள். அதிகம் பயன்படுத்தப்படும் மூன்று: Counter, defaultdict, namedtuple.

Counter: அதிர்வெண் எண்ணிக்கை

Python
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)]

இது சரங்களிலும் வேலை செய்கிறது (எழுத்துக்களைக் கணக்கிடுகிறது):

Python
Counter("ciao mondo")
# Counter({'o': 2, 'c': 1, 'i': 1, 'a': 1, ' ': 1, 'm': 1, 'n': 1, 'd': 1})

இது (+, -, &, |) எண்ணிக்கையில் செட் போன்ற செயல்பாடுகளை ஆதரிக்கிறது - மிகவும் எளிது வெவ்வேறு ஆதாரங்களில் இருந்து எண்ணிக்கைகளை ஒருங்கிணைக்க.

defaultdict: தானியங்கு இயல்புநிலையுடன் கட்டளையிடவும்

விடுபட்ட விசையை நீங்கள் அணுகும்போது, அதை அழைப்பதன் மூலம் உருவாக்குகிறது தொழிற்சாலை.

Python
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 இல்லாமல், நீங்கள் எழுத வேண்டும்:

Python
gruppi = {}
for nome in [...]:
    if nome not in gruppi:
        gruppi[nome] = []
    gruppi[nome].append(1)

பொதுவான தொழிற்சாலைகள்: list, int (இயல்புநிலை 0), set, dict.

namedtuple: புலப் பெயர்கள் கொண்ட டூப்பிள்ஸ்

மாறாத சாதனை வகுப்புகளை உருவாக்குவதற்கான இலகுரக வழி. இது ஒரு டூப்பிள், ஆனால் பெயர் மூலம் புல அணுகலுடன்.

Python
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

(மேலும் அதிநவீன நிகழ்வுகளுக்கு dataclasses 3.7 முதல் உள்ளது — M9 ஐப் பார்க்கவும்.)

nametuple: இலகுரக மாறாத பதிவுகள்

collections மாட்யூல் namedtuple ஐ ஏற்றுமதி செய்கிறது, இது கன்ஸ்ட்ரக்டர்கள் அல்லது கொதிகலன் முறைகளை எழுதாமல் கட்டமைக்கப்பட்ட தரவைச் சேமிக்க இலகுரக வகுப்பு போன்ற பொருட்களை விரைவாக உருவாக்க உங்களை அனுமதிக்கிறது:

Python
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#python.m8.l3.e1
முயற்சிகள்: 0ஏற்றுகிறது…

`வார்த்தைகள் = ['மேலா', 'பேரா', 'மேலா', 'கிவி', 'மேலா', 'பேரா']` பட்டியலில் கொடுக்கப்பட்டால், `டாப்' இல் அடிக்கடி வரும் வார்த்தையை ஒரு சரமாகக் கணக்கிடவும். `மேல்` என்பதை மதிப்பிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

எதிர்(...).most_common(1) வருமானம் [(வார்த்தை, எண்ணிக்கை)].

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#python.m8.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

மாணவர்களுக்கு `பதிவுகள் = [('Ada', 'mate'), ('Linus', 'fisica'), ('Ada', 'storia'), ('Grace', 'mate')]` கொடுக்கப்பட்டால், `courses_per_student` என்பதை இயல்புநிலையாக (பட்டியல்) உருவாக்கவும். `டிக்ட்(பாடங்கள்_ஒவ்வொரு_மாணவருக்கும்)` என்பதை மதிப்பிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

defaultdict(list) பிறகு s, c பதிவுகளில்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

கூடுதல் சவால்

உடற்பயிற்சி#python.m8.l3.e3
முயற்சிகள்: 0ஏற்றுகிறது…

\`கலெக்ஷன்\` இலிருந்து \`கவுண்டர்\` ஐ இறக்குமதி செய்யவும். \`text = "abracadabra"\` சரத்தில் உள்ள எழுத்துக்களின் அதிர்வெண்ணை எண்ணவும். கவுண்டரை \`char_counter\` இல் சேமித்து அதை மதிப்பிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

கவுண்டர் சரத்தை ஒரு அளவுருவாக எடுத்து ஒவ்வொரு எழுத்தின் நிகழ்வுகளையும் கணக்கிடுகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்