"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنك إنشاء جميع التباديل الممكنة لسلسلة معينة في بايثون باستخدام وحدة "itertools"، وكيف تتعامل مع التكرارات المحتملة؟

كيف يمكنك إنشاء جميع التباديل الممكنة لسلسلة معينة في بايثون باستخدام وحدة "itertools"، وكيف تتعامل مع التكرارات المحتملة؟

تم النشر بتاريخ 2024-11-03
تصفح:664

How do you generate all possible permutations of a given string in Python using the `itertools` module, and how do you handle potential duplicates?

العثور على جميع التباديل الممكنة لسلسلة معينة في بايثون

إن مهمة إنشاء جميع التباديل الممكنة لسلسلة إدخال معينة لها حل مباشر في بايثون. للشروع في هذه المهمة، نأخذ في الاعتبار في البداية سلسلة الإدخال، والتي سنحاول إعادة ترتيبها. للتوضيح، لنأخذ السلسلة 'stack' كمثال:

x = 'stack'

هدفنا هو إنشاء تبديلات لـ 'stack' عن طريق إعادة ترتيب أحرفها.

l=['stack','satck','sackt'.......]

تقليديًا، يمكن للمرء أن يفكر في الأساليب التكرارية لحل هذا التحدي، بما في ذلك الاختيار العشوائي وتبديل أزواج الأحرف لإنشاء التباديل الجديدة. ومع ذلك، يمكننا تبسيط مهمتنا من خلال استخدام طريقة التباديل () التي توفرها وحدة itertools. كما تقترح وثائقها:

itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.

استخدام هذه الطريقة في السيناريو الخاص بنا يتطلب منا الالتزام بالاعتبارات التالية:

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

لذلك، للحصول على التباديل المطلوب، نستخدم النهج التالي:

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