Mergesort Implementierung zu sortieren nach String-Länge - Python
Frage
Ich habe das umgesetzt, was ich glaube, ein Merge-Sort-Algorithmus in Python zu sein. Ich habe noch nie in Python programmiert, so dass ich mehrere Ressourcen mit Befehlen verwendet, die mir fremd schien, um ein besseres Verständnis zu gewinnen.
Allerdings habe ich auch nie umgesetzt Mergesort an erster Stelle, also bin ich nicht sicher, ob ich es sogar richtig umgesetzt habe. Jede mögliche Anleitung, Tipps oder Korrekturen würden sehr geschätzt werden.
Hier ist meine merge Methode:
def merge(left, right):
result = []
i, j = 0, 0
while(i < len(left) and j< len(right)):
if(len(left[i]) <= len(right[j])):
print(i)
result.append(left[i])
i=i+1
else:
result.append(right[j])
j=j+1
result += left[i:]
result += right[j:]
return result
inzwischen, hier ist meine mergesort Methode:
def mergesort(list):
if len(list) < 2:
return list
else:
middle = len(list) / 2
left = mergesort(list[:middle])
right = mergesort(list[middle:])
return merge(left, right)
Vielen Dank für jede mögliche Hilfe! :)
Lösung
Do nennen Variablen "Liste" nicht. Das ist der Name des Python-Array-Typs, so eine Variable mit dem gleichen Namen verwendet, ist verwirrend.
Wenn Sie von einem bedingten zurückkehren, brauchen Sie nicht den Rest der Funktion in einem anderen Block sitck.
def mergesort(list):
if len(list) < 2:
return list
middle = len(list) / 2
left = mergesort(list[:middle])
right = mergesort(list[middle:])
return merge(left, right)
Insgesamt sieht es vernünftig.
Natürlich, für alles andere als eine Übung, sollten Sie List.Sort oder sortiert werden ().
a = ["abc", "de", "f", "ghijkl"]
print sorted(a, lambda a,b: cmp(len(a), len(b)))
Andere Tipps
Wie wäre es die sorted()
-Funktion? Wie folgt aus:
def len_cmp(x, y):
return len(x) - len(y)
my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)