Heim  >  Artikel  >  Backend-Entwicklung  >  Wie generiert man in Python mit dem Modul „itertools“ alle möglichen Permutationen einer bestimmten Zeichenfolge und wie geht man mit potenziellen Duplikaten um?

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
Mary-Kate OlsenOriginal
2024-10-26 01:04:28761Durchsuche

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>

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

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

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])
Return successive r length permutations of elements in the iterable.

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>

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']

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>

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!

Stellungnahme:
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