Ich schrieb eine rekursive Einfügesortierfunktion in Python 2.7 und stieß auf zwei Dinge, die ich nicht verstehen kann.Unerwartetes Verhalten einer rekursiven Einfügesortierfunktion in Python
Der erste war der Fehler TypeError: can only assign an iterable
, die ich vermutete, es mit der Rekursion der Funktion zu tun hatte, aber ich habe nicht vor allem das Problem mit meinem Code:
def recursiveInsertionSort(v):
if len(v)!=2:
v[0:len(v)-1]=recursiveInsertionSort(v[0:len(v)-1])
i=len(v)-1
while v[i-1]>v[i]:
v[i-1], v[i]=v[i], v[i-1]
i-=1
if i==0: return v
Das zweite Problem ist es wahrscheinlich verbunden.
In diesem Fall habe ich nicht einmal einen Fehler bekommen (wenn Sie wissen, warum bitte sagen Sie mir), aber die Funktion hat einfach nicht funktioniert.
def recursiveInsertionSort(v):
if len(v)!=2:
recursiveInsertionSort(v[0:len(v)-1])
i=len(v)-1
while v[i-1]>v[i] and i>0:
v[i-1], v[i]=v[i], v[i-1]
i-=1
Als ich das Problem war mit der rekursiven Verwendung der Funktion erraten korrigierte ich meinen Fehler:
def recursiveInsertionSort(v):
if len(v)!=2:
temp=v[0:len(v)-1]
recursiveInsertionSort(temp)
v[0:len(v)-1]=temp
i=len(v)-1
while v[i-1]>v[i] and i>0:
v[i-1], v[i]=v[i], v[i-1]
i-=1
Aber ich möchte wirklich die Ursachen dieser beiden Verhaltensweisen verstehen, können Sie mir helfen ?
EDIT Ich bitte auch, ob es eine schönere Art und Weise zu tun ist:
temp=v[0:len(v)-1]
recursiveInsertionSort(temp)
v[0:len(v)-1]=temp
Ich habe das nicht bemerkt, aber es erklärt nicht den "Type error". Ich denke, dass das Problem, das Sie aufgedeckt haben, nicht aufgetaucht ist, als ich überprüft habe, ob es funktioniert, weil es Probleme mit v [0: len (v) -1] = recursiveInsertionSort (v [0: len (v) -1]), aber ich weiß nicht warum. –
Der 'TypeError' tritt im vorherigen rekursiven Aufruf auf, wenn er versucht, einem Slice' None' zuzuordnen. – Blckknght
Ich habe bearbeitet, um ein bisschen mehr darüber zu erklären, woher die Ausnahme kommt, und um eine Verbesserung Ihrer anderen Implementierung vorzuschlagen. – Blckknght