بايثون العرب
10.5K subscribers
866 photos
183 videos
768 links
Download Telegram
🚀 شرح Counter و defaultdict من مكتبة collections في بايثون

تعلم كيف تجعل معالجة البيانات أسهل وأكثر كفاءة باستخدام أدوات قوية من مكتبة collections في بايثون.

from collections import Counter, defaultdict

# استخدام Counter لعد العناصر
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(my_list)
print(f"Counter: {count}")
print(f"Count of 'apple': {count['apple']}")

# استخدام defaultdict
default_dict = defaultdict(int) # القيمة الافتراضية هي 0 للأعداد الصحيحة
default_dict['a'] += 1
default_dict['b'] += 5
default_dict['a'] += 2
print(f"defaultdict: {default_dict}")
print(f"Value of 'c' (non-existent): {default_dict['c']}")

default_dict_list = defaultdict(list) # القيمة الافتراضية هي قائمة فارغة
default_dict_list['fruits'].append('apple')
default_dict_list['fruits'].append('banana')
default_dict_list['vegetables'].append('carrot')
print(f"defaultdict with list: {default_dict_list}")


مكتبة `collections` في بايثون توفر هياكل بيانات متخصصة. `Counter` مفيدة جداً لعد تكرار العناصر في قائمة أو أي iterable آخر، حيث تعيد قاموساً يحتوي على العناصر كـ مفاتيح وعدد تكرارها كـ قيم. `defaultdict` تشبه القاموس العادي، لكنها تسمح بتحديد قيمة افتراضية لأي مفتاح غير موجود عند الوصول إليه لأول مرة، مما يجنب حدوث أخطاء `KeyError` ويسهل عمليات التجميع.

['#بايثون', '#برمجة', '#collections', '#Counter', '#defaultdict', '#PythonTips', '#DataAnalysis']
✨ استكشاف مكتبة `collections` في بايثون ✨

هل تبحث عن هياكل بيانات أكثر كفاءة وتخصصًا في بايثون؟ مكتبة `collections` هي الحل! دعنا نكتشف بعض أدواتها المفيدة.

from collections import Counter, defaultdict, deque

# Counter: عد العناصر
my_list = ['a', 'b', 'a', 'c', 'b', 'a']
counts = Counter(my_list)
print(f"Counter: {counts}") # Output: Counter: Counter({'a': 3, 'b': 2, 'c': 1})

# defaultdict: قاموس بقيم افتراضية
default_dict = defaultdict(int) # القيمة الافتراضية هي 0 للأعداد الصحيحة
default_dict['apple'] += 1
default_dict['banana']
print(f"defaultdict: {default_dict}") # Output: defaultdict: defaultdict(<class 'int'>, {'apple': 1, 'banana': 0})

# deque: قائمة مزدوجة النهاية (سريعة الإضافة والحذف من الطرفين)
double_ended_queue = deque([1, 2, 3])
double_ended_queue.appendleft(0)
double_ended_queue.append(4)
print(f"deque: {double_ended_queue}") # Output: deque: deque([0, 1, 2, 3, 4])


تُقدم مكتبة `collections` في بايثون هياكل بيانات متخصصة تتجاوز القوائم والقواميس القياسية. `Counter` مفيد لعد تكرار العناصر، `defaultdict` يبسط التعامل مع القواميس التي تحتاج قيمًا افتراضية، و `deque` يوفر عمليات إضافة وحذف سريعة من كلا طرفي التسلسل.

['#بايثون', '#برمجة', '#Python', '#Collections', '#DataStructures', '#Tips']
✨ تحسين أداء Python: استخدام `collections.deque` 🚀

هل تعاني من بطء عمليات الإضافة والحذف من بداية القوائم في Python؟ اكتشف كيف يمكن لـ `collections.deque` أن يحدث فرقًا كبيرًا!

from collections import deque

# إنشاء deque
d = deque(['a', 'b', 'c'])

# إضافة عنصر إلى البداية (فعال جدًا)
d.appendleft('x')
print(f"بعد appendleft: {d}")

# إضافة عنصر إلى النهاية (فعال جدًا)
d.append('y')
print(f"بعد append: {d}")

# حذف عنصر من البداية (فعال جدًا)
first = d.popleft()
print(f"العنصر المحذوف من البداية: {first}")
print(f"بعد popleft: {d}")

# حذف عنصر من النهاية (فعال جدًا)
last = d.pop()
print(f"العنصر المحذوف من النهاية: {last}")
print(f"بعد pop: {d}")

# مثال على الطوابير (Queues)
queue = deque()
queue.append('task1')
queue.append('task2')
print(f"الطابور الحالي: {queue}")
current_task = queue.popleft()
print(f"تنفيذ المهمة: {current_task}")
print(f"الطابور بعد التنفيذ: {queue}")


القوائم العادية في Python بطيئة عند إضافة أو حذف عناصر من البداية (O(n)). `collections.deque` (اختصار لـ double-ended queue) مصمم خصيصًا لهذه العمليات، حيث يوفر إضافة وحذفًا فعالين من كلا الطرفين (O(1)). هذا يجعله مثاليًا لتطبيقات مثل الطوابير (Queues) والمكدسات (Stacks) وتحسينات الأداء العامة.

['#Python', '#برمجة', '#تطوير', '#نصائح_برمجة', '#PythonTips', '#collections', '#deque', '#أداء']
🚀 تحسين أداء Python: استخدم `collections.deque`!

هل تواجه بطئاً عند إضافة أو إزالة عناصر من بداية قائمة Python؟ الحل بسيط ومدمج في مكتبة `collections`!

from collections import deque

# إنشاء deque
my_deque = deque(['a', 'b', 'c'])

# إضافة عنصر في البداية
my_deque.appendleft('x')
print(my_deque) # Output: deque(['x', 'a', 'b', 'c'])

# إزالة عنصر من البداية
first_element = my_deque.popleft()
print(first_element) # Output: x
print(my_deque) # Output: deque(['a', 'b', 'c'])

# مقارنة مع القائمة العادية (للتوضيح)
my_list = ['a', 'b', 'c']
# إضافة في البداية (أبطأ)
my_list.insert(0, 'x')
# إزالة من البداية (أبطأ)
my_list.pop(0)


تُعد `collections.deque` (قائمة الانتظار المزدوجة) هياكل بيانات محسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم العادية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` بطيئة (تعقيد زمني O(n)) لأنها تتطلب إعادة ترتيب جميع العناصر، فإن عمليات `appendleft()` و `popleft()` في `deque` تتم بسرعة ثابتة (تعقيد زمني O(1)). هذا يجعلها مثالية للتطبيقات التي تتطلب معالجة متكررة للعناصر من بداية أو نهاية تسلسل.

['#Python', '# البرمجة', '#تطوير', '#كود', '#نصائح_برمجة', '#collections', '#deque']
✨ تحسين أداء Python: استخدام `collections.deque` 🚀

هل تعاني من بطء العمليات على بداية القوائم في Python؟ إليك حل سحري باستخدام `deque`!

from collections import deque

my_list = [1, 2, 3, 4, 5]
my_deque = deque(my_list)

# إضافة عنصر في البداية (سريع جداً)
my_deque.appendleft(0)

# إزالة عنصر من البداية (سريع جداً)
first_element = my_deque.popleft()

print(my_deque)
print(first_element)


تُعد `collections.deque` (طابور ثنائي الطرف) بنية بيانات مُحسَّنة للإضافة والحذف من كلا الطرفين (البداية والنهاية) بكفاءة عالية (تعقيد زمني O(1)). على عكس القوائم العادية في Python، حيث تكون عمليات الإضافة والحذف في البداية مكلفة (O(n))، توفر `deque` أداءً ممتازًا لهذه العمليات، مما يجعلها مثالية للتعامل مع الطوابير، والمكدسات، وأي سيناريو يتطلب تعديلات متكررة على أطراف التسلسل.

['#Python', '#برمجة', '#تطوير', '#نصائح_برمجية', '#collections', '#deque', '#أداء']
✨ تحسين أداء Python: استخدام `collections.deque` 🚀

هل تعاني من بطء عمليات الإضافة والحذف من بداية أو نهاية القوائم في Python؟ 🤔 تعرف على `deque` من وحدة `collections` وكيف يمكن أن تحدث فرقاً كبيراً!

from collections import deque

my_list = [1, 2, 3, 4, 5]
my_deque = deque(my_list)

# إضافة عنصر في البداية
my_deque.appendleft(0)
print(f"بعد الإضافة في البداية: {my_deque}")

# إضافة عنصر في النهاية
my_deque.append(6)
print(f"بعد الإضافة في النهاية: {my_deque}")

# حذف عنصر من البداية
first_element = my_deque.popleft()
print(f"العنصر المحذوف من البداية: {first_element}")
print(f"بعد الحذف من البداية: {my_deque}")

# حذف عنصر من النهاية
last_element = my_deque.pop()
print(f"العنصر المحذوف من النهاية: {last_element}")
print(f"بعد الحذف من النهاية: {my_deque}")


الكائن `deque` (double-ended queue) مصمم خصيصاً لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم العادية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` مكلفة (تتطلب إعادة ترتيب العناصر)، فإن `deque` توفر أداءً بزمن ثابت O(1) لهذه العمليات. هذا يجعله مثالياً للحالات التي تحتاج فيها إلى بناء هياكل بيانات مثل قوائم الانتظار أو المكدسات بكفاءة عالية.

['#Python', '#برمجة', '#تطوير', '#علوم_البيانات', '#كود', '#نصائح_برمجية', '#Collections', '#Deque']
❤1
💡 تحسين أداء Python مع `collections.deque` 🚀

هل تبحث عن طريقة أسرع لإضافة أو إزالة عناصر من طرفي قائمة في Python؟ تعرف على `collections.deque` وكيف يمكن أن يحدث فرقًا كبيرًا!

from collections import deque

# إنشاء deque
d = deque(['a', 'b', 'c'])

# إضافة عنصر إلى اليسار
d.appendleft('x')

# إضافة عنصر إلى اليمين
d.append('y')

# إزالة عنصر من اليسار
left_item = d.popleft()

# إزالة عنصر من اليمين
right_item = d.pop()

print(d)
print(f"Element removed from left: {left_item}")
print(f"Element removed from right: {right_item}")


`collections.deque` (double-ended queue) هي بنية بيانات محسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (اليسار واليمين). على عكس القوائم العادية، لا تتطلب `deque` إعادة ترتيب العناصر عند الإضافة أو الحذف من البداية، مما يجعلها أسرع بكثير لهذه العمليات.

['#Python', '#برمجة', '#تطوير', '#نصائح_برمجية', '#collections', '#deque', '#Performance']