مرکزی مواد پر جائیں
ماڈیول 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: خودکار ڈیفالٹ کے ساتھ dict

ایک حکم یہ ہے کہ، جب آپ کسی گمشدہ کلید تک رسائی حاصل کرتے ہیں، تو اسے کال کرکے ** بناتا ہے** فیکٹری

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

(مزید نفیس کیسز کے لیے 3.7 سے dataclasses بھی ہے — 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لوڈ ہو رہا ہے…

فہرست `الفاظ = ['mela', 'pera', 'mela', 'kiwi', 'mela', 'pera']` کو دیکھتے ہوئے، ایک سٹرنگ کے طور پر `top` میں اکثر آنے والے لفظ کی گنتی کریں۔ `ٹاپ` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

کاؤنٹر(...).most_common(1) لوٹتا ہے [(لفظ، شمار)]۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m8.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

طلباء کو `انرولمنٹس = [('Ada', 'mate'), ('Linus', 'fisica'), ('Ada', 'storia'), ('Grace', 'mate')]` کو دیکھتے ہوئے، `courses_per_student` کو بطور ڈیفالٹڈکٹ (فہرست) بنائیں۔ `dict(courses_per_student)' کا اندازہ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ڈیفالٹڈکٹ (فہرست) پھر اندراج میں s، c کے لیے۔

3 کوششوں کے بعد حل دستیاب ہے۔

اضافی چیلنج

ورزش#python.m8.l3.e3
کوششیں: 0لوڈ ہو رہا ہے…

\`مجموعوں\` سے \`کاؤنٹر\` درآمد کریں۔ سٹرنگ میں حروف کی فریکوئنسی شمار کریں \`text = "abracadabra"\`. کاؤنٹر کو \`char_counter\` میں اسٹور کریں اور اس کا اندازہ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

کاؤنٹر سٹرنگ کو پیرامیٹر کے طور پر لیتا ہے اور ہر حرف کی موجودگی کو شمار کرتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔