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! :)

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top