Wie generiert man in Python mit dem Modul „itertools' alle möglichen Permutationen einer bestimmten Zeichenfolge und wie geht man mit potenziellen Duplikaten um?

Mary-Kate Olsen
Freigeben: 2024-10-26 01:04:28
Original
780 Leute haben es durchsucht

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

Alle möglichen Permutationen einer gegebenen Zeichenfolge in Python finden

Die Aufgabe, alle möglichen Permutationen einer gegebenen Eingabezeichenfolge zu generieren, hat eine einfache Lösung in Python. Um mit dieser Aufgabe zu beginnen, betrachten wir zunächst die Eingabezeichenfolge, die wir neu ordnen wollen. Nehmen wir zur Veranschaulichung die Zeichenfolge „Stack“ als Beispiel:

<code class="python">x = 'stack'</code>
Nach dem Login kopieren

Unser Ziel ist es, Permutationen von „Stack“ zu erstellen, indem wir seine Zeichen neu anordnen.

<code class="python">l=['stack','satck','sackt'.......]</code>
Nach dem Login kopieren

Traditionell eins könnten iterative Ansätze zur Lösung dieser Herausforderung in Betracht ziehen, die die zufällige Auswahl und Transposition von Zeichenpaaren beinhalten, um neue Permutationen zu erzeugen. Wir können unsere Aufgabe jedoch vereinfachen, indem wir die vom Modul itertools bereitgestellte Methode permutations() verwenden. Wie aus der Dokumentation hervorgeht:

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

Die Verwendung dieser Methode in unserem Szenario erfordert, dass wir die folgenden Überlegungen einhalten:

  1. Wenn r weggelassen oder auf „Keine“ gesetzt wird, Standardmäßig wird die Länge des Iterables verwendet, um die Generierung aller möglichen Permutationen sicherzustellen.
  2. Permutationen werden in lexikografischer Reihenfolge ausgegeben. Wenn also die Eingabe-Iterable sortiert ist, werden die Permutationstupel auf sortierte Weise erzeugt.

Um unsere gewünschten Permutationen zu erhalten, verwenden wir daher den folgenden Ansatz:

<code class="python">from itertools import permutations
perms = [''.join(p) for p in permutations('stack')]</code>
Nach dem Login kopieren

Dieser Ansatz führt zu den folgenden Permutationen:

['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']
Nach dem Login kopieren

Wenn wir in unseren Permutationen auf Duplikate stoßen, können wir damit umgehen, indem wir unsere Daten in ein Format umstrukturieren, das Duplikate verhindert, z. B. eine Menge:

<code class="python">perms = [''.join(p) for p in permutations('stacks')]
len(perms) # 720
len(set(perms)) # 360</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie generiert man in Python mit dem Modul „itertools' alle möglichen Permutationen einer bestimmten Zeichenfolge und wie geht man mit potenziellen Duplikaten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!