Sorted Containers عبارة عن مكتبة مجموعات مرتبة مرخصة من Apache2، ومكتوبة بلغة Python النقية، وسريعة مثل امتدادات C.
تعد مكتبة Python القياسية رائعة حتى تحتاج إلى نوع مجموعات مرتبة. سيشهد الكثيرون أنه يمكنك تحقيق الكثير دون الحاجة إلى ذلك، ولكن في اللحظة التي تحتاج فيها حقًا إلى قائمة مرتبة، أو إملاء مرتبة، أو مجموعة مرتبة، فإنك تواجه عشرات التطبيقات المختلفة، معظمها يستخدم امتدادات C دون وثائق ومعايير رائعة.
في بايثون، يمكننا أن نفعل ما هو أفضل. ويمكننا أن نفعل ذلك بلغة بايثون النقية!
> >> from sortedcontainers import SortedList
> >> sl = SortedList ([ 'e' , 'a' , 'c' , 'd' , 'b' ])
> >> sl
SortedList ([ 'a' , 'b' , 'c' , 'd' , 'e' ])
> >> sl *= 10_000_000
> >> sl . count ( 'c' )
10000000
> >> sl [ - 3 :]
[ 'e' , 'e' , 'e' ]
> >> from sortedcontainers import SortedDict
> >> sd = SortedDict ({ 'c' : - 3 , 'a' : 1 , 'b' : 2 })
> >> sd
SortedDict ({ 'a' : 1 , 'b' : 2 , 'c' : - 3 })
> >> sd . popitem ( index = - 1 )
( 'c' , - 3 )
> >> from sortedcontainers import SortedSet
> >> ss = SortedSet ( 'abracadabra' )
> >> ss
SortedSet ([ 'a' , 'b' , 'c' , 'd' , 'r' ])
> >> ss . bisect_left ( 'c' )
2
جميع العمليات الموضحة أعلاه تعمل بشكل أسرع من الزمن الخطي. يستغرق العرض التوضيحي أعلاه أيضًا ما يقرب من غيغابايت من الذاكرة لتشغيله. عندما يتم ضرب القائمة التي تم فرزها في عشرة ملايين، فإنها تخزن عشرة ملايين مرجع لكل من "a" إلى "e". يتطلب كل مرجع ثمانية بايت في الحاوية التي تم فرزها. من الصعب جدًا التغلب على ذلك لأنه يمثل تكلفة المؤشر لكل كائن. كما أنها أقل حملًا بنسبة 66% من تنفيذ الشجرة الثنائية النموذجية (مثل Red-Black Tree وAVL-Tree وAA-Tree وSplay-Tree وTreap وما إلى ذلك) حيث يجب على كل عقدة أيضًا تخزين مؤشرين للعقد الفرعية.
تتولى Sorted Containers تنفيذ كل أعمال المجموعات المصنفة في Python - مما يجعل نشر Python واستخدامك أمرًا سهلاً. ليست هناك حاجة لتثبيت مترجم C أو إنشاء ملحقات مخصصة مسبقًا وتوزيعها. الأداء هو ميزة والاختبار لديه تغطية 100% مع اختبارات الوحدة وساعات من الضغط.
أليكس مارتيلي ، زميل مؤسسة برمجيات بايثون
"أشياء جيدة!... تعجبني فكرة التنفيذ البسيطة والفعالة المتمثلة في تقسيم الحاويات التي تم فرزها إلى "أجزاء" أصغر لتجنب تكاليف إدخال O(N)."
جيف كنوب ، مؤلف كتاب "الكتابة الاصطلاحية لبايثون ومدرب بايثون".
"هذا الجزء الأخير، "سريع مثل امتدادات C،" كان من الصعب تصديقه. سأحتاج إلى نوع من مقارنة الأداء لأقتنع بأن هذا صحيح. قام المؤلف بتضمين هذا في المستندات. إنه كذلك."
كيفن صموئيل ، مدرب بايثون و جانغو
أنا مندهش تمامًا، ليس فقط من جودة الكود (إنه قابل للقراءة بشكل لا يصدق ويحتوي على تعليقات أكثر من الكود، واو)، ولكن من مقدار العمل الفعلي الذي تقوم به في أشياء ليست كودًا: الوثائق، والقياس، وتفسيرات التنفيذ. حتى سجل git نظيف واختبارات الوحدة نفدت من الصندوق على Python 2 و 3.
مارك سمرفيلد ، نداء قصير لمجموعات بايثون المصنفة
يبدو أن مكتبة بايثون القياسية "البطاريات المضمنة" تحتوي على بطارية مفقودة. والحجة القائلة بأننا "لم نكن نمتلكها من قبل" قد تضاءلت. لقد حان الوقت لأن تقدم بايثون مجموعة كاملة من فئات التجميع خارج الصندوق، بما في ذلك الفئات المصنفة.
يتم استخدام Sorted Containers في مشاريع مفتوحة المصدر شائعة مثل: Zipline، وهي مكتبة تداول خوارزمية من Quantopian؛ Angr، منصة التحليل الثنائي من جامعة كاليفورنيا في سانتا باربرا؛ Trio، مكتبة الإدخال / الإخراج غير المتزامنة؛ وDask Distributed، وهي مكتبة حسابية موزعة تدعمها Continuum Analytics.
يعد تثبيت الحاويات المصنفة أمرًا بسيطًا من خلال النقاط:
تثبيت $ pip للحاويات المصنفة
يمكنك الوصول إلى الوثائق في المترجم باستخدام وظيفة المساعدة المضمنة في Python. تعمل المساعدة على الوحدات النمطية والفئات والأساليب الموجودة في الحاويات المصنفة.
> >> import sortedcontainers
> >> help ( sortedcontainers )
> >> from sortedcontainers import SortedDict
> >> help ( SortedDict )
> >> help ( SortedDict . popitem )
الوثائق الكاملة للحاويات المصنفة متاحة على http://www.grantjenks.com/docs/sortedcontainers/
يوفر دليل المستخدم مقدمة للحاويات المصنفة ومقارنات وتحليلات شاملة للأداء.
يوفر دليل المجتمع معلومات حول تطوير الحاويات المصنفة بالإضافة إلى تفاصيل الدعم والتنفيذ والتاريخ.
توفر وثائق API معلومات حول وظائف وفئات ووحدات محددة في حزمة Sorted Containers.
حقوق الطبع والنشر 2014-2024 جرانت جينكس
مرخص بموجب ترخيص Apache، الإصدار 2.0 ("الترخيص")؛ لا يجوز لك استخدام هذا الملف إلا وفقًا للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن ذلك مطلوبًا بموجب القانون المعمول به أو تم الاتفاق عليه كتابيًا، يتم توزيع البرامج الموزعة بموجب الترخيص على أساس "كما هي"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص لمعرفة الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.