Permutationen aus Liste löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ichlernenoch
User
Beiträge: 1
Registriert: Mittwoch 11. Januar 2023, 21:20

Hallo, ich habe eine Liste mit unterschiedlich langen Tupeln und ich soll vorhandene Permutationen aus der Liste heraus löschen. Ich hab bisher keine passende Lösung gefunden. Hätte jemand eine Lösung für mich? Die Reihenfolge der Liste soll dabei erhalten bleiben

Beispiel der Liste:

liste=[("Katze", "Hund", "Maus"), ( "Hund", "Katze", "Maus"), ("Katze", "Maus"), ("Maus", "Katze")]
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Fertige Lösungen gibt es hier eher selten. Was hast du probiert? Was ist dir unklar?
Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`more_itertools.unique_everseen()` ist eine *fast* fertige Lösung. Es fehlt nur eine passende `key`-Funktion. Und ansonsten würde man ja die Funktion im Grunde nachprogrammieren.

Code: Alles auswählen

In [191]: liste
Out[191]: 
[('Katze', 'Hund', 'Maus'),
 ('Hund', 'Katze', 'Maus'),
 ('Katze', 'Maus'),
 ('Maus', 'Katze')]

In [192]: list(more_itertools.unique_everseen(liste, das_hier_fehlt_noch))
Out[192]: [('Katze', 'Hund', 'Maus'), ('Katze', 'Maus')]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6872
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@ichlernenoch
Es gibt ja verschiedene Container-Datentypen in Python. Also welche, die dafür gedacht sind, mehrere Elemente zusammen zu fassen (z.B. Listen). Beschäftige dich doch mal damit, was es so alles an Typen gibt. Einer dieser Container kann seinen Inhalt vergleichen, ohne auf die Reihenfolge der Elemente zu achten. Somit werden etwa [1, 2, 3] und [3, 1, 2] als gleich angesehen.

Und dann gibt es typisches Code-Muster, das den "Gleichmacher" in einer Schleife fragt, ob eine bestimmte Abfolge (bei dir in Form eines Tupels) ihm schon bekannt ist. Falls bekannt, dann wird die Abfolge verworfen. Falls unbekannt, dann wird sie dem Gleichmacher hinzugefügt. Die Lösung besteht dann aus allen bekannten Abfolgen.

Der "Gleichmacher" hat in Wirklichkeit einen anderen Namen, den du bestimmt auch aus der Mathematik kennst. Den musst du aber schon selbst heraus finden. Gehört auf jeden Fall zur Standardbibliothek von Python und es erfordert kein weiteres Modul, um ihn zu nutzen.
Antworten