deque
استخدم قوائم انتظار سريعة من الطرفين
deque درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
ما هو deque؟
إن deque (تُنطق «ديك») هو طابور ذو طرفين من الوحدة collections. وهو يدعم عمليات الإضافة والإزالة السريعة من كلا الطرفين.
استورده باستخدام from collections import deque.
from collections import deque
d = deque([1, 2, 3])
print(d)لماذا لا نستخدم list فحسب؟
تكون القوائم بطيئة عند الإدراج أو الإزالة من المقدمة، لأن كل عنصر يجب أن يتحرك. أما deque فينفذ العمليات على المقدمة في زمن ثابت، مما يجعله مثالياً للطوابير.
from collections import deque
d = deque(['b', 'c'])
d.appendleft('a')
print(d)الإضافة إلى الطرفين
استخدم .append() للإضافة إلى اليمين، و.appendleft() للإضافة إلى اليسار.
from collections import deque
d = deque()
d.append(1)
d.append(2)
d.appendleft(0)
print(d)إزالة العناصر من الطرفين
تزيل .pop() العنصر الموجود في أقصى اليمين وتعيده؛ أما .popleft() فتزيل العنصر الموجود في أقصى اليسار. كلتاهما سريعتان.
from collections import deque
d = deque([10, 20, 30])
print(d.pop())
print(d.popleft())
print(d)قائمة انتظار بسيطة (FIFO)
لتطبيق سلوك الوارد أولًا يخرج أولًا، أضف العناصر من اليمين وأزلها باستخدام popleft من اليسار. تخرج العناصر بالترتيب الذي وصلت به.
from collections import deque
queue = deque()
queue.append('first')
queue.append('second')
print(queue.popleft())
print(queue.popleft())deque محدودة الحجم باستخدام maxlen
حدّد قيمة لـ maxlen لوضع حد أقصى للحجم. عند امتلائها، تؤدي الإضافة إلى أحد الطرفين تلقائيًا إلى حذف عنصر من الطرف الآخر، وهذا مفيد جدًا للاحتفاظ بالسجل الحديث.
from collections import deque
recent = deque(maxlen=3)
for n in [1, 2, 3, 4, 5]:
recent.append(n)
print(recent)تدوير العناصر
تنقل .rotate(n) العناصر إلى اليمين بمقدار n من الخطوات؛ وتؤدي قيمة n السالبة إلى التدوير نحو اليسار. تلتف العناصر حول الطرفين.
from collections import deque
d = deque([1, 2, 3, 4, 5])
d.rotate(2)
print(d)
d.rotate(-1)
print(d)الإضافة دفعة واحدة
تضيف .extend() عدة عناصر إلى اليمين، بينما تضيف .extendleft() العناصر إلى اليسار. انتبه إلى أن extendleft تعكس ترتيب العناصر التي تضيفها.
from collections import deque
d = deque([3])
d.extend([4, 5])
d.extendleft([2, 1])
print(d)الفهرسة والطول
تدعم deque الفهرسة مثل القائمة، وتعمل مع len(). ويكون الوصول إلى العناصر الوسطى أبطأ من الوصول إلى العناصر عند الطرفين، لذا يُفضّل استخدام عمليات الطرفين.
from collections import deque
d = deque(['a', 'b', 'c'])
print(d[0])
print(d[-1])
print(len(d))المسح والعكس
تعكس .reverse() ترتيب deque في مكانها، بينما تفرغها .clear(). تعدّل كلتاهما deque مباشرةً.
from collections import deque
d = deque([1, 2, 3])
d.reverse()
print(d)
d.clear()
print(d)عدّ التكرارات
مثل القائمة، تحتوي deque على .count() لحساب عدد مرات ظهور قيمة ما.
from collections import deque
d = deque([1, 2, 2, 3, 2])
print(d.count(2))اختبار سريع
أنشأت قائمة انتظار FIFO باستخدام deque. أي زوج من الأساليب يوفّر الترتيب الصحيح للوارد أولًا يخرج أولًا؟
مراجعة: deque
تعلّمت أن deque:
- تدعم
append/popالسريعين عند الطرفين، بخلاف القائمة. - توفّر
appendleftوpopleftللطرف الأيسر. - يمكن تقييد حجمها باستخدام
maxlenللاحتفاظ بالعناصر الحديثة فقط. - توفّر
rotateوextendوreverseوcountلتنفيذ عمليات شبيهة بعمليات قوائم الانتظار.
from collections import deque
q = deque(maxlen=2)
for x in ['a', 'b', 'c']:
q.append(x)
print(q)الأسئلة الشائعة
هل درس «deque» مجاني؟
نعم — نص درس «deque» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «deque»؟
استخدم قوائم انتظار سريعة من الطرفين تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «deque»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.