2017-02-07 1 views
1

Ich versuche eine Liste schnell zu machen und möchte dies an Ort und Stelle tun.List slice python

Ich habe den folgenden Code und möchte im Allgemeinen wissen (dieses Problem kommt oft für mich, wie ich Listenprobleme auf der tatsächlichen Liste anstelle einer komplizierten Sequenz von Renditen oder mit seltsamen Indizes zu lösen versuchen) kann Listenausschnitt erlauben mir jemals, die Liste zu beeinflussen, von der es abgeleitet ist? Gibt es größere Auswirkungen für so etwas?

def partition(A,l,r): 
    p=A[l] 
    i=l+1 
    print(A) 
    for j in range(l+1,r): 
     if A[j]<p: 
      save=A[i] 
      A[i]=A[j] 
      A[j]=save 
      i+=1 
    save=A[i-1] 
    A[i-1]=A[l] 
    A[l]=save 
    return i-1 
def quickSort(A,n): 
    if n>1: 
     split=partition(A,0,n) 
     quickSort(A[:split],len(A[:split])) 
     quickSort(A[split+1:],len(A[split+1:])) 
     print(A) 
    return A 
A=[3,4,5,2,10,7,6,9,1] 
print(quickSort(A,len(A))) 
+2

Ein Listenschnitt ist immer eine Kopie. Deshalb ist "l [:]" das Idiom, um eine ganze Liste zu kopieren. – Barmar

+0

Gibt es eine Möglichkeit, Code wie diesen zu funktionieren? Kann ich tatsächlich auf die Elemente in meiner Liste A mit einem Listenausschnitt zeigen? –

+0

Es gibt eine Diskrepanz in der Anzahl der Argumente Ihrer Funktion 'quickSort' –

Antwort

3

numpy können Sie auf Scheiben in einer Weise zuordnen, die in der ursprünglichen Anordnung reflektiert wird (numpy Scheiben views zurück):

import numpy as np 

a = np.array(range(10)) 
print(a) # [0 1 2 3 4 5 6 7 8 9] 
b = a[3:7] 
print(b) # [3 4 5 6] 
b[0] = 33 
print(b) # [33 4 5 6] 
print(a) # [ 0 1 2 33 4 5 6 7 8 9] 

eine Scheibe eines Python list immer gibt eine Kopie so würden Sie muss selbst eine Ansicht in eine Liste schreiben ...

+0

Man du bist fantastisch! funktioniert perfekt und ich hätte nie gedacht, numpy für eine Aufgabe wie diese zu verwenden. Danke danke danke. –

Verwandte Themen