اختر البنية المناسبة لكل حاجة: الصفوف غير القابلة للتغيير، والمجموعات لاختبارات الانتماء بتعقيد O(1)، وCounter وdefaultdict للأنماط المتكرّرة.
افتح هذا الدرس في Kodokonاختيار بنية البيانات الصحيحة يحسم قابلية القراءة والأداء في خطوة واحدة. إن الصف (tuple) متتالية غير قابلة للتغيير: مثالي لسجل غير متجانس ثابت الحجم (إحداثيات، أو زوج مفتاح-قيمة). وعدم القابلية للتغيير يعني قابلية التجزئة (hashable) (إن كانت محتوياته كذلك): لذا يمكن للصف أن يكون مفتاح قاموس أو عنصر مجموعة، وهو ما لا تستطيعه القائمة. ويجعل التفكيك (unpacking) الكود معبّرًا - والدالة التي "تُرجِع عدة قيم" تُرجِع في الحقيقة صفًّا.
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")])تضمن المجموعة (set) التفرّد وتوفّر اختبار انتماء بتعقيد 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) القيمة الغائبة على الفور: وdefaultdict(list) هو الأداة النموذجية لتجميع العناصر حسب المفتاح دون اختبار وجود المفتاح في كل دورة من الحلقة.
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))