merge implementazione Ordina per ordinare la lunghezza della stringa - pitone
Domanda
Ho implementato quello che credo di essere un algoritmo merge sort in python. Non ho mai programmato in Python prima, quindi ho usato diverse risorse con i comandi che sembravano straniero a me, per ottenere una migliore comprensione.
Tuttavia, ho anche mai attuata merge sort, in primo luogo, quindi non sono sicuro se ho anche implementato correttamente. Qualsiasi orientamento, consigli, o correzioni sarebbe molto apprezzato.
Ecco il mio metodo di fusione:
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
Nel frattempo, ecco il mio metodo Mergesort:
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)
Grazie per qualsiasi aiuto possibile! :)
Soluzione
Non nominare le variabili "lista". Questo è il nome del tipo di matrice di Python, in modo da utilizzare una variabile con lo stesso nome è confuso.
Quando si torna da un condizionale, non è necessario per sitck il resto della funzione in un blocco else.
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)
Nel complesso, sembra ragionevole.
Naturalmente, per qualsiasi cosa, ma un esercizio, si dovrebbe utilizzare list.sort o ordinato ().
a = ["abc", "de", "f", "ghijkl"]
print sorted(a, lambda a,b: cmp(len(a), len(b)))
Altri suggerimenti
Come sull'utilizzo della funzione sorted()
? In questo modo:
def len_cmp(x, y):
return len(x) - len(y)
my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)