العثور على جميع التباديل الممكنة لسلسلة معينة في بايثون
إن مهمة إنشاء جميع التباديل الممكنة لسلسلة إدخال معينة لها حل مباشر في بايثون. للشروع في هذه المهمة، نأخذ في الاعتبار في البداية سلسلة الإدخال، والتي سنحاول إعادة ترتيبها. للتوضيح، لنأخذ السلسلة 'stack' كمثال:
x = 'stack'
هدفنا هو إنشاء تبديلات لـ 'stack' عن طريق إعادة ترتيب أحرفها.
l=['stack','satck','sackt'.......]
تقليديًا، يمكن للمرء أن يفكر في الأساليب التكرارية لحل هذا التحدي، بما في ذلك الاختيار العشوائي وتبديل أزواج الأحرف لإنشاء التباديل الجديدة. ومع ذلك، يمكننا تبسيط مهمتنا من خلال استخدام طريقة التباديل () التي توفرها وحدة itertools. كما تقترح وثائقها:
itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.
استخدام هذه الطريقة في السيناريو الخاص بنا يتطلب منا الالتزام بالاعتبارات التالية:
لذلك، للحصول على التباديل المطلوب، نستخدم النهج التالي:
from itertools import permutations
perms = [''.join(p) for p in permutations('stack')]
ينتج عن هذا الأسلوب التباديل التالية:
['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta', 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
إذا واجهنا تكرارات في التباديل لدينا، فيمكننا التعامل معها عن طريق إعادة هيكلة بياناتنا إلى تنسيق يمنع التكرارات، مثل المجموعة:
perms = [''.join(p) for p in permutations('stacks')]
len(perms) # 720
len(set(perms)) # 360
لين (بيرم) # 720
لين(مجموعة(تجعيد)) # 360 تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3