Um zu erklären, warum Ihr Skript gerade nicht funktioniert, benenne ich die Variable unsorted
in um sorted
.
Ihre Liste ist zunächst noch nicht sortiert. Natürlich machen wir uns sorted
daran False
.
Sobald wir die while
Schleife starten , gehen wir davon aus, dass die Liste bereits sortiert ist. Die Idee ist folgende: Sobald wir zwei Elemente finden, die nicht in der richtigen Reihenfolge sind, kehren wir sorted
zurück False
. sorted
wird True
nur bleiben , wenn es keine Elemente in der falschen Reihenfolge gab .
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
Es gibt auch kleinere kleine Probleme, die dazu beitragen würden, dass der Code effizienter oder lesbarer wird.
In der for
Schleife verwenden Sie die Variable element
. Technisch element
ist kein Element; Es ist eine Zahl, die einen Listenindex darstellt. Außerdem ist es ziemlich lang. Verwenden Sie in diesen Fällen einfach einen temporären Variablennamen, z. B. i
für "Index".
for i in range(0, length):
Der range
Befehl kann auch nur ein Argument (benannt stop
) annehmen . In diesem Fall erhalten Sie eine Liste aller Ganzzahlen von 0 bis zu diesem Argument.
for i in range(length):
Der Python Style Guide empfiehlt, Variablen in Kleinbuchstaben mit Unterstrichen zu benennen. Dies ist ein sehr kleiner Trottel für ein kleines Skript wie dieses; Es ist mehr, um Sie an den Python-Code zu gewöhnen, der am häufigsten ähnelt.
def bubble(bad_list):
Um die Werte zweier Variablen auszutauschen, schreiben Sie sie als Tupelzuweisung. Die rechte Seite wird als Tupel ausgewertet (z. B. (badList[i+1], badList[i])
ist (3, 5)
) und dann den beiden Variablen auf der linken Seite zugewiesen ( (badList[i], badList[i+1])
).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Füge alles zusammen und du bekommst folgendes:
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(Ich habe übrigens auch Ihre Druckerklärung entfernt.)