تقنية

bisect_left في بايثون: هل يطبق key على قيمة البحث؟

بحث بستة بين المفتاحين ثلاثة وثمانية
قيمة عددية. [1] [2]

نبحث في سجلات مرتبة بحسب حقلها العددي. [1] [2]

الخلاصة السريعة

لا؛ key يحول عناصر القائمة، لا قيمة البحث x. [1] [2]

  • مفتاحا سجلينا 3 و8، بالترتيب. [1] [2]
  • البحث عن العدد 6 يعيد الموضع 1. [1] [2]
  • تمرير ('flag',6) بدل العدد يرفع TypeError هنا. [1] [2]
  • الموضع للإدراج؛ لم ندرج سجلًا أو نغير القائمة. [1] [2]
  • اختبرنا 3.12.14؛ القائمة مرتبة بمفاتيح المقارنة. [1] [2]

المثال

from bisect import bisect_left as left
rows=[('dock',3),('kite',8)]
print(left(rows,6,key=lambda r:r[1]))
try:left(rows,('flag',6),key=lambda r:r[1])
except TypeError:print('TypeError')

[1] [2]

أي طرف يتحول؟

المقارنة هنا بين الحقل العددي لسجل موجود وقيمة البحث كما مررناها. لذلك نمرر 6؛ أما الصف الكامل فلا يتحول تلقائيًا إلى حقله الثاني. ظهر الخطأ من مقارنة عدد بصف في هذا المثال. [1] [2]

تمرير صف كامل يعطي خطأ نوع
مقارنة مختلفة. [1] [2]

الموضع وحد الفحص

رقم 1 يعني بين سجلينا عند الترقيم من صفر، ولا يثبت وجود 6. عندما نبحث عن 9 يصير الموضع 2، بعد السجلين. القائمة ثابتة أثناء البحث. [1] [2]

المراجع

  1. Python 3.12: bisect_left key
  2. CPython 3.12.14: _bisectmodule.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.