فهم دالة collections.deque() لإنشاء قوائم مزدوجة النهاية في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 21 سبتمبر 2024

محتوى المقال

فهم دالة collections.deque() لإنشاء قوائم مزدوجة النهاية في Python

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

ما هي دالة collections.deque()؟

دالة deque() هي جزء من مكتبة collections في Python، وتُستخدم لإنشاء هيكل بيانات يُعرف بالقائمة المزدوجة النهاية أو deque (double-ended queue). تتميز هذه القوائم بأنها تسمح بإضافة وحذف العناصر من كلا الجهتين (البداية والنهاية) بكفاءة عالية مقارنة بالقوائم التقليدية في Python.

الصيغة العامة لدالة deque()

الصيغة العامة لاستخدام deque() هي كما يلي:

from collections import deque

$deque_object = deque([iterable], maxlen=None)

حيث أن:

  • iterable: هو الكائن القابل للتكرار الذي يمكن أن يُستخدم لملء القائمة المزدوجة النهاية عند إنشائها (مثل قائمة أو سلسلة نصية).
  • maxlen: هو طول القائمة الأقصى. إذا تم تحديده، ستحتفظ القائمة بهذا الطول الثابت، وسيتم حذف العناصر الأقدم إذا تجاوزت الحد الأقصى.

لماذا نستخدم deque()؟

القوائم المزدوجة النهاية (deque) توفر ميزات متعددة تجعلها مفيدة في سيناريوهات معينة، مثل:

  • إدراج وحذف فعال: إضافة أو حذف العناصر من البداية أو النهاية يتم بسرعة ثابتة O(1).
  • التحكم في الطول: يمكنك تحديد طول ثابت للقائمة باستخدام المعامل maxlen، حيث يتم تلقائيًا حذف العناصر الأقدم عند إضافة عناصر جديدة.

مثال أساسي على استخدام deque()

لنبدأ بمثال بسيط لإنشاء قائمة مزدوجة النهاية باستخدام deque() وإضافة بعض العناصر:

from collections import deque

$dq = deque([1, 2, 3, 4])

# إضافة عنصر إلى النهاية
$dq.append(5)

# إضافة عنصر إلى البداية
$dq.appendleft(0)

print($dq)

الناتج سيكون:

deque([0, 1, 2, 3, 4, 5])

كما ترى، تم إضافة العنصر 0 إلى بداية القائمة، والعدد 5 إلى نهايتها.

إزالة العناصر باستخدام deque()

إلى جانب إضافة العناصر، تتيح لك deque() إزالة العناصر بسهولة من البداية أو النهاية باستخدام الدوال pop() و popleft().

مثال على إزالة العناصر

# إزالة العنصر الأخير
$dq.pop()

# إزالة العنصر الأول
$dq.popleft()

print($dq)

الناتج سيكون:

deque([1, 2, 3, 4])

تمت إزالة العنصرين 0 و5 من البداية والنهاية على التوالي.

تحديد طول ثابت للقائمة باستخدام maxlen

ميزة أخرى لـ deque() هي إمكانية تحديد طول ثابت للقائمة باستخدام المعامل maxlen. إذا تم تجاوز هذا الطول، سيتم حذف العناصر الأقدم تلقائيًا.

مثال على استخدام maxlen

$dq = deque([1, 2, 3], maxlen=3)

$dq.append(4)

print($dq)

الناتج سيكون:

deque([2, 3, 4], maxlen=3)

كما ترى، عندما أضفنا العنصر 4 إلى القائمة، تم حذف العنصر 1 تلقائيًا للحفاظ على الطول المحدد.

تكرار العناصر داخل deque

القوائم المزدوجة النهاية تدعم التكرار عبر العناصر تمامًا مثل القوائم العادية في Python. يمكنك استخدام حلقات for لتكرار العناصر في قائمة deque بنفس الطريقة.

مثال على التكرار

for $item in $dq:
    print($item)

الناتج سيكون:

  • 2
  • 3
  • 4

استخدام deque في تطبيقات عملية

تعتبر deque مناسبة بشكل خاص في بعض التطبيقات العملية مثل:

  • الطوابير (Queues): يُمكن استخدامها لإنشاء طوابير فعالة نظرًا لإمكانية إضافة وإزالة العناصر من البداية والنهاية بسرعة ثابتة.
  • المكدسات (Stacks): يُمكن استخدامها كمكدس حيث يمكن إضافة العناصر إلى النهاية وإزالتها من النهاية.
  • تتبع العمليات الأخيرة: عندما تحتاج إلى تتبع عدد محدود من العناصر مثل سجلات العمليات، يمكنك استخدام deque مع maxlen.

مثال على إنشاء طابور باستخدام deque

from collections import deque

$queue = deque()

# إضافة عناصر إلى الطابور
$queue.append('Task 1')
$queue.append('Task 2')
$queue.append('Task 3')

# معالجة وإزالة العناصر من بداية الطابور
$queue.popleft()
$queue.popleft()

print($queue)

الناتج سيكون:

deque(['Task 3'])

كما ترى، تمت إزالة أول مهمتين من الطابور باستخدام popleft()، بينما تبقت المهمة الثالثة.

الخلاصة

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

طور مهاراتك: مقالات يجب قراءتها في البرمجة