الفرق بين المراجعتين ل"Python/bisect/bisect right"

من موسوعة حسوب
< Python‏ | bisect
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>bisect.bisect_right()‎</code> في بايثون}}</noinclude> تعيد موقع الإدراج الذي يأتي بعد (...')
 
 
سطر 15: سطر 15:
 
== القيمة المعادة ==
 
== القيمة المعادة ==
  
يقسم موقع الإدراج المعاد i المصفوفة a إلى نصفين، بحيث يكون التعبير all(val <= x forval in a[lo:i])‎ للجانب الأيسر والتعبير all(val > x for val in a[i:hi])‎.
+
يقسم موقع الإدراج المعاد <code>i</code> المصفوفة <code>a</code> إلى نصفين، بحيث يكون التعبير <code>all(val <= x forval in a[lo:i])</code>‎ للجانب الأيسر والتعبير <code>all(val > x for val in a[i:hi])‎</code>.
  
هذه الدالة مشابهة للدالة bisect_left()‎، ولكنّها تعيد موقع الإدراج الذي يأتي بعد (إلى الجانب الأيمن) العناصر المماثلة للعنصر المضاف x في المصفوفة a.
+
هذه الدالة مشابهة للدالة <code>[[Python/bisect/bisect left|bisect_left()]]</code>‎، ولكنّها تعيد موقع الإدراج الذي يأتي بعد (إلى الجانب الأيمن) العناصر المماثلة للعنصر المضاف <code>x</code> في المصفوفة <code>a</code>.
  
 
== أمثلة ==
 
== أمثلة ==
سطر 24: سطر 24:
  
 
<syntaxhighlight lang="python3">
 
<syntaxhighlight lang="python3">
>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
+
>>> from bisect import bisect_right
>>> data.sort(key=lambda r: r[1])
+
>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
>>> keys = [r[1] for r in data]        # قائمة من المفاتيح المعدّة مسبقًا
+
...    i = bisect_right(breakpoints, score)
>>> data[bisect_left(keys, 0)]
+
...    return grades[i]
('black', 0)
+
...
>>> data[bisect_left(keys, 1)]
+
>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
('blue', 1)
+
['F', 'A', 'C', 'C', 'B', 'A', 'A']
>>> data[bisect_left(keys, 5)]
+
 
('red', 5)
 
>>> data[bisect_left(keys, 8)]
 
('yellow', 8)
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  

المراجعة الحالية بتاريخ 20:06، 5 أغسطس 2018


تعيد موقع الإدراج الذي يأتي بعد (إلى الجانب الأيمن) العناصر المماثلة للعنصر المضاف في المصفوفة المعطاة.

البنية العامة

bisect.bisect_right(a, x, lo=0, hi=len(a))

المعاملات

يمكن استخدام المعاملين lo و hi لتحديد جزء من القائمة، ولكن السلوك الافتراضي لهذه الدالة هو التعامل مع القائمة بأكملها. إن كان العنصر x موجودًا من قبل في القائمة a، فإنّ موقع الإدراج سيكون بعد (إلى يمين) العناصر الموجودة أصلًا. يمكن استخدام القيمة المعادة كأول معامل في التابع list.insert()‎ على افتراض أنّ القائمة a مفروزة أصلًا.

القيمة المعادة

يقسم موقع الإدراج المعاد i المصفوفة a إلى نصفين، بحيث يكون التعبير all(val <= x forval in a[lo:i])‎ للجانب الأيسر والتعبير all(val > x for val in a[i:hi])‎.

هذه الدالة مشابهة للدالة bisect_left()‎، ولكنّها تعيد موقع الإدراج الذي يأتي بعد (إلى الجانب الأيمن) العناصر المماثلة للعنصر المضاف x في المصفوفة a.

أمثلة

يبين المثال التالي آلية عمل التابع:

>>> from bisect import bisect_right
>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
...     i = bisect_right(breakpoints, score)
...     return grades[i]
... 
>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']

انظر أيضًا

  • الدالة bisect_left()‎: تحدّد الدالة موقع إدراج العنصر المحدد في المصفوفة المعطاة.
  • الدالة bisect()‎: تعيد موقع الإدراج الذي يأتي بعد (إلى الجانب الأيمن) العناصر المماثلة للعنصر المضاف في المصفوفة المعطاة.

مصادر

صفحة Array bisection algorithm في توثيق بايثون الرسمي.