Hi
Wie würdet ihr am einfachsten überprüfen ob 2 Wörter genau die gleichen Buchstaben enthalten? (Reihenfolge egal, Anzahl ist wichtig)
z.B.
funktion('abcdefg', 'abgfcde') -> True
funktion('abcdefg', 'abgffde') -> False
Ich würde das schon hinkriegen aber nur mit mühsamen Mitteln.
Was mir spontan einfällt ist ein Dict (buchstabe -> anzahl) zu erstellen und jeden Key überprüfen ob er die gleiche Anzahl hat, aber das sieht mir recht aufwendig aus um nur 2 Wörter zu vergleichen.
Hat jemand eine bessere Idee?
Ach ja die 2 Wörter sind sicher gleich lang.
Gruss
2 Wörter vergleich -> gleiche Buchstaben
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie wärs denn damit:
Scheint nach einem kurzen Test ganz ok zu sein:
Code: Alles auswählen
def compare(s1, s2):
return sorted(s1) == sorted(s2)
Code: Alles auswählen
In [16]: compare('abcdefg', 'abgfcde')
Out[16]: True
In [17]: compare('abcdefg', 'abgffde')
Out[17]: False
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wobei die dict-methode zumindest bei langen Wörten die schnellere sein müsste, da sie in O(n) (n=Länge des längeren Wortes) fertig wird (2x max. n Buchstaben in dict einfügen + 1x max. nEinträge vergleichen).
Der beste Sortieralgorithmus kann iirc, nicht schneller als O(n log n) sein, es sei denn, das Feld ist bereits sortiert oder ähnliche Späße.
Aber solange die Wörter klein sind dürfte es nicht so sehr ins Gewicht fallen, und die sorted()-Variante ist auch etwas lesbarer.
Der beste Sortieralgorithmus kann iirc, nicht schneller als O(n log n) sein, es sei denn, das Feld ist bereits sortiert oder ähnliche Späße.
Aber solange die Wörter klein sind dürfte es nicht so sehr ins Gewicht fallen, und die sorted()-Variante ist auch etwas lesbarer.