ماڈیول اسباق (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: خودکار ڈیفالٹ کے ساتھ dict
ایک حکم یہ ہے کہ، جب آپ کسی گمشدہ کلید تک رسائی حاصل کرتے ہیں، تو اسے کال کرکے ** بناتا ہے** فیکٹری
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 دیکھیں۔)
nametuple: ہلکے وزن کے ناقابل تغیر ریکارڈز
collections ماڈیول namedtuple کو بھی برآمد کرتا ہے، جو آپ کو کنسٹرکٹرز یا بوائلر پلیٹ کے طریقوں کو لکھے بغیر سٹرکچرڈ ڈیٹا کو ذخیرہ کرنے کے لیے تیزی سے ہلکی پھلکی کلاس جیسی اشیاء بنانے دیتا ہے:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)اسے آزمائیں
فہرست `الفاظ = ['mela', 'pera', 'mela', 'kiwi', 'mela', 'pera']` کو دیکھتے ہوئے، ایک سٹرنگ کے طور پر `top` میں اکثر آنے والے لفظ کی گنتی کریں۔ `ٹاپ` کا اندازہ لگائیں۔
اشارہ دکھائیں۔
کاؤنٹر(...).most_common(1) لوٹتا ہے [(لفظ، شمار)]۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
طلباء کو `انرولمنٹس = [('Ada', 'mate'), ('Linus', 'fisica'), ('Ada', 'storia'), ('Grace', 'mate')]` کو دیکھتے ہوئے، `courses_per_student` کو بطور ڈیفالٹڈکٹ (فہرست) بنائیں۔ `dict(courses_per_student)' کا اندازہ کریں۔
اشارہ دکھائیں۔
ڈیفالٹڈکٹ (فہرست) پھر اندراج میں s، c کے لیے۔
3 کوششوں کے بعد حل دستیاب ہے۔
اضافی چیلنج
\`مجموعوں\` سے \`کاؤنٹر\` درآمد کریں۔ سٹرنگ میں حروف کی فریکوئنسی شمار کریں \`text = "abracadabra"\`. کاؤنٹر کو \`char_counter\` میں اسٹور کریں اور اس کا اندازہ کریں۔
اشارہ دکھائیں۔
کاؤنٹر سٹرنگ کو پیرامیٹر کے طور پر لیتا ہے اور ہر حرف کی موجودگی کو شمار کرتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔