العثور على التكرار n لسلسلة فرعية في سلسلة
تحديد الفهرس المطابق للتكرار n لسلسلة فرعية هو وهي مهمة تنشأ غالبًا في سيناريوهات البرمجة المختلفة. في بايثون، لا توجد وظيفة مدمجة مصممة خصيصًا لهذا الغرض. ومع ذلك، هناك العديد من الأساليب التي يمكن استخدامها لتحقيق هذه النتيجة.
أحد الأساليب المباشرة هو استخدام حلقة للتكرار عبر السلسلة وحساب تكرارات السلسلة الفرعية. تتم تهيئة فهرس البداية لنتيجة التكرار الأول، وتستمر الحلقة حتى يتم العثور على التكرار n.
def find_nth_occurrence(haystack, needle, n):
index = haystack.find(needle)
while index >= 0 and n > 1:
index = haystack.find(needle, index len(needle))
n -= 1
return index
هذه الطريقة فعالة وسهلة الفهم، ولكنها تتطلب تمريرات متعددة عبر السلسلة، الأمر الذي يمكن أن يستغرق وقتًا طويلاً للسلاسل الكبيرة.
هناك طريقة أخرى أكثر بايثونية وهي استخدام العادية التعبيرات. توفر التعبيرات العادية طريقة قوية وموجزة للبحث عن السلاسل ومعالجتها. تستخدم الوظيفة التالية طريقة re.findall() للعثور على كافة تكرارات السلسلة الفرعية ثم تسترد الفهرس n:
import re
def find_nth_occurrence_regex(haystack, needle, n):
occurrences = re.findall(needle, haystack)
if len(occurrences) >= n:
return haystack.index(occurrences[n - 1])
else:
return -1
هذه الطريقة أسرع من الطريقة التكرارية للسلاسل الكبيرة، ولكنها تتطلب استيراد وحدة إضافية (إعادة). بالإضافة إلى ذلك، قد يكون أقل قابلية للقراءة من النهج التكراري بالنسبة لبعض المستخدمين.
يعتمد الاختيار بين أسلوبي التعبير التكراري والعادي في النهاية على المتطلبات المحددة للمهمة المطروحة. بالنسبة للسلاسل الصغيرة، قد يكون النهج التكراري كافيًا، بينما بالنسبة للسلاسل الكبيرة، قد يوفر أسلوب التعبير العادي أداءً أفضل.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3