تكرار السؤال: …
الإجابة المختصرة
استخدم deque عندما تحتاج إضافة أو إزالة العناصر من الطرفين بكفاءة O(1)، مثل الطوابير والنوافذ المنزلقة، واستخدم list للوصول بالفهرس والإضافة في النهاية.
الشرح
الـ list مصفوفة متجاورة، فإن list.pop(0) و insert(0, x) تحرك كل العناصر وتكلف O(n). أما deque فقائمة مرتبطة من كتل تدعم appendleft و popleft بزمن ثابت، لكن الوصول بالفهرس في منتصفها O(n). ويحوّل الخيار maxlen الـ deque إلى مخزن دائري يحتفظ بآخر N عنصر تلقائيًا. للطوابير بين الخيوط استخدم queue.Queue، وللأولويات استخدم heapq.
مثال بالكود
from collections import deque
queue = deque()
queue.append("job-1")
queue.append("job-2")
first = queue.popleft() # O(1) بدل list.pop(0)
recent = deque(maxlen=3)
for value in [1, 2, 3, 4, 5]:
recent.append(value)
print(recent) # deque([3, 4, 5], maxlen=3)أخطاء شائعة
- استخدام list.pop(0) في طابور كبير داخل حلقة.
- الوصول المتكرر لعناصر في منتصف deque بالفهرس.