اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

يمكن استخدام الترتاتيب permetions لتوليد جميع السلاسل الممكنة من مجموعة من العناصر حيث تتوفر بايثون على المكتبة المساعدة itertools على المولد للتراتيب permutations ويمكن تمرير له قائمة بالعناصر مع طول القوائم الجزئية منها:

from itertools import permutations

string = "01234567890123456789"

for i in permutations(string, 10):
    print (i)
  • يمكن تمرير سلسلة نصية*
  • لن يتم الحفاظ على ترتيب العناصر ضمن المصفوفة إنما تشكيل جميع الاحتمالات الممكنة
  • 3
نشر

يمكن أيضًا أن تستعمل regular expression للحصول على قائمة الأرقام كالتالي:

>>> import re
>>> string = "01234567890123456789"
>>> matches = re.finditer(r'(?=(\d{10}))', string)
>>> results = [int(match.group(1)) for match in matches]
>>> results
[123456789, 1234567890, 2345678901, 3456789012, 4567890123, 5678901234, 6789012345, 7890123456, 8901234567, 9012345678, 123456789]

لاحظ أن رقم 10 في السطر الثالث يعبر عن طول سلسلة الأرقام

  • 0
نشر (معدل)

يمكننا عمل ذلك عن طريق إستخدام دالة combinations المتوفرة في مكتبة itertools والتي تقوم بإسترجاع كافة التوافيق المحتملة بكل الأطوال الممكنة للمتغير string، لاحظ المثال أدناه:

from itertools import combinations
string = "01234567890123456789"
res = [string[x:y] for x, y in combinations(
            range(len(string) + 1), r = 2)]
print(list(set([i for i in res if len(i)==10])))

بعد إستيراد الدالة، قمنا بتعريف المتغير string ومن ثم إيجاد كل التوافيق اللازمة عن طريق تقسيم النص إلى أجزاء بإستخدام x,y في كل مرة يأخذان قيمتين مختلفتين إبتداء من 0 للمتغير x و 1 للمتغير y، بذلك يمكننا تقسيم string و الحصول على القيم من موقع x و حتى الوصول إلى موقع y (موضح بعملية التقسيم او slicing للمتغير string بقيم [x:y].

أخيراً عملية الإختبار الشرطية لإستخراج النصوص التي يبلغ طولها 10 حروف، و من ثم تحويلها لمجموعة بإستخدام set للحصول على القيم بدون تكرار، و القيم المطبوعة تكون في شكل قائمة بإستخدام دالة list لتقوم بعملية التحويل (إختياري حسب ما يتطلب البرنامج).

و بذلك يمكننا الحصول على كل الإحتمالات الممكنة و إستخراج 10 قيم مختلفة بدون تكرار أو إخفاء لقيمة 0 في بداية النص.

تم التعديل في بواسطة Reem Elmahdi
إضافة توضيح

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...