Python :: Aufgabe #333
2 Lösungen
Anagramme (Schüttelwörter) gruppieren
Fortgeschrittener - Python
von JKooP
- 13.03.2021 um 12:41 Uhr
Von einem Anagramm oder auch deutsch Schüttelwort spricht man,
wenn man durch Umstellen der vorhandenen Zeichen eines Wortes ein neues sinnvolles Wort bilden kann.
Oft werden Anagramme mit Palindromen verwechselt, wobei ein Anagramm auch gleichzeitig
ein Palindrom sein kann, z.B.: LAGERREGAL – REGALLAGER.
ANNA – ANNA hingegen ist kein Anagramm, sondern ein Palindrom,
obwohl es wegen des Gleichklangs ANA oft irrtümlich so bezeichnet wird.
Gegeben ist eine Liste bestehend aus verschiedenen Wörtern.
list = { "eat", "tea", "tan", "ate", "nat", "bat" };
Schreibe eine Methode/Funktion, die die Liste list auf Anagramme hin überprüft
und die Ergebnisse in einer neuen Liste gruppiert zurückgibt.
result = { {"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"} }
Die Reihenfolge der Rückgabe in der List ist nicht entscheidend.
Wörter, die keine Anagramme bilden, sollen ebenfalls als Einzelwort in die Ergebnisliste aufgenommen werden.
Je nach Programmiersprache oder Vorliebe können statt Listen auch Arrays oder Tupel verwendet werden.
Viel Spaß
wenn man durch Umstellen der vorhandenen Zeichen eines Wortes ein neues sinnvolles Wort bilden kann.
Oft werden Anagramme mit Palindromen verwechselt, wobei ein Anagramm auch gleichzeitig
ein Palindrom sein kann, z.B.: LAGERREGAL – REGALLAGER.
ANNA – ANNA hingegen ist kein Anagramm, sondern ein Palindrom,
obwohl es wegen des Gleichklangs ANA oft irrtümlich so bezeichnet wird.
Gegeben ist eine Liste bestehend aus verschiedenen Wörtern.
list = { "eat", "tea", "tan", "ate", "nat", "bat" };
Schreibe eine Methode/Funktion, die die Liste list auf Anagramme hin überprüft
und die Ergebnisse in einer neuen Liste gruppiert zurückgibt.
result = { {"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"} }
Die Reihenfolge der Rückgabe in der List ist nicht entscheidend.
Wörter, die keine Anagramme bilden, sollen ebenfalls als Einzelwort in die Ergebnisliste aufgenommen werden.
Je nach Programmiersprache oder Vorliebe können statt Listen auch Arrays oder Tupel verwendet werden.
Viel Spaß
Lösungen:
Python-Code
""" #333: Anagramme (Schüttelwörter) gruppieren Schreibe eine Methode/Funktion, die die Liste list auf Anagramme hin überprüft und die Ergebnisse in einer neuen Liste gruppiert zurückgibt. """ def prf_anag(anagra): anagras = [[""] * 2] * len(anagra) anagraz = [] ordbegr = "" index = -1 for i in range(0, len(anagra)): anagras[i] = [''.join(sorted(anagra[i]))] + [anagra[i]] anagras = sorted(anagras) for t1, t2 in anagras: if t1 == ordbegr: anagraz[index] += [t2] if t1 != ordbegr: index += 1 ordbegr = t1 anagraz.insert(index, [t2]) print(anagraz) def main(): prf_anag(["eat", "tea", "tan", "ate", "nat", "bat"]) if __name__ == '__main__': main()
Python-Code
def ordsum(word): ordsum = 0 for char in word: ordsum += ord(char) return ordsum def group(inputlist): memo = {} result = [] for word in inputlist: if ordsum(word) not in memo: tmp = memo[ordsum(word)] = [word] result.append(tmp) else: memo[ordsum(word)].append(word) return result # test inputlist = ["eat", "tea", "tan", "ate", "nat", "bat"] print(group(inputlist))