Seite 1 von 1

Permutationen aus Liste löschen

Verfasst: Mittwoch 11. Januar 2023, 21:30
von ichlernenoch
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")]

Re: Permutationen aus Liste löschen

Verfasst: Mittwoch 11. Januar 2023, 21:53
von __deets__
Fertige Lösungen gibt es hier eher selten. Was hast du probiert? Was ist dir unklar?

Re: Permutationen aus Liste löschen

Verfasst: Mittwoch 11. Januar 2023, 22:08
von __blackjack__
`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')]

Re: Permutationen aus Liste löschen

Verfasst: Donnerstag 12. Januar 2023, 03:36
von snafu
@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.