„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 03.11.2024
Durchsuche:811

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 möchten. Nehmen wir zur Veranschaulichung die Zeichenfolge „stack“ als Beispiel:

x = 'stack'

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

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

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

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

Verwendung dieser Methode in unserem Szenario erfordert, dass wir uns an die folgenden Überlegungen halten:

  1. Wenn r weggelassen oder auf „Keine“ gesetzt wird, wird standardmäßig 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:

from itertools import permutations
perms = [''.join(p) for p in permutations('stack')]

Dieser Ansatz ergibt die 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, wie zum Beispiel eine Menge:

perms = [''.join(p) for p in permutations('stacks')]
len(perms) # 720
len(set(perms)) # 360
len(perms) # 720 len(set(perms)) # 360

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3