Seite 2 von 2
Verfasst: Mittwoch 1. Oktober 2008, 07:09
von numerix
Ich glaube, es wäre ganz hilfreich, wenn du deinen letztgültigen Code noch einmal posten könntest - dann kann man konkreter Bezug nehmen.
Zu der Sache mit dem Minimum:
Vor der inneren Schleife hattest du m=0 gesetzt. Wenn du m stattdessen auf das Minimum der Liste setzt, dann klappt es.
Verfasst: Mittwoch 1. Oktober 2008, 08:36
von BlackJack
@Sandra: ``while``-Schleifen werden solange durchlaufen wie die angegebene Bedingung wahr ist. Jetzt musst Du Dir nur noch überlegen was gelten muss, damit die Schleife noch einmal ausgeführt werden muss. Du veränderst in der Schleife ja einige Werte, was ist also das Anzeichen dafür, dass die Verarbeitung fertig bzw. noch nicht fertig ist!?
Mit `pop()` meinte ich genau das.
Beim Minimum siehe den Beitrag von numerix. Das würde ich das nur *einmal* vor der Schleife ermitteln und an einen weiteren Namen binden. Das Minimum aller Objekte, die sortiert werden sollen, ändert sich während des Sortierens ja nicht.
Verfasst: Mittwoch 1. Oktober 2008, 08:52
von numerix
BlackJack hat geschrieben:Beim Minimum siehe den Beitrag von numerix. Das würde ich das nur *einmal* vor der Schleife ermitteln und an einen weiteren Namen binden. Das Minimum aller Objekte, die sortiert werden sollen, ändert sich während des Sortierens ja nicht.
Ja, so sollte man es machen.
Verfasst: Mittwoch 1. Oktober 2008, 15:08
von Sandra
Hier mein neuer Code:
Code: Alles auswählen
#! /usr/bin/env python
import random
a = []
for x in range(10):
a.append(random.random())
a.append(-1)
a.append(-0.5)
print a
def sort1(li):
li = li[:]
a = []
mi = min(li)
ll = len(li)
while(len(a)<ll):
n = 0
m = mi
for y in xrange(len(li)):
if li[y] > m:
n = y
m = li[y]
a.append(li.pop(n))
a.reverse()
return a
b = sort1(a)
print b
Das mit dem Minimum und Maximum habe ich allerdings noch nicht verstanden. Reverse ändert doch die Reihenfolge einer Liste, wie soll man sich dies ersparen?
Kann mir eigenentlich jemand die Zeile
erklären? Es funktioniert, und Darii hat geschrieben, es kopiert die Liste, doch warum funktioniert es mit li = li nicht?
mfg Sandra
Verfasst: Mittwoch 1. Oktober 2008, 15:21
von sea-live
@sandra du solltst mal ein paar tips auch annehmen
das befüllen der liste geht ganz ohne inizialisierung des ARRAY's
a=[]
einfach reinschiesen !
zu listen hier die docu
http://www.python.org/doc/2.4.2/tut/node7.html
Verfasst: Mittwoch 1. Oktober 2008, 15:23
von lunar
Eine Zuweisung der Art "li = li" bindet das dahinter liegende Objekt nur an einen neuen Namen, erzeugt aber keine Kopie des Objekts selbst.
Ein Slice über die gesamte Liste "li[:]" dagegen erzeugt ein neues Listen-Objekt mit allen Elementen der Originalliste. Diese wird dann in der Zuweisung an einen Namen gebunden.
Verfasst: Mittwoch 1. Oktober 2008, 15:38
von sea-live
Zum Doppelpunkt solltest du einige übungen anstellen mit der shell z.B
Code: Alles auswählen
>>> a=[1,2,3,4,5,6,]
>>> a[1:-1]
[2, 3, 4, 5]
>>> a[:]
[1, 2, 3, 4, 5, 6]
>>> a[:2]
[1, 2]
>>> a[2:]
[3, 4, 5, 6]
>>> a[2:4]
[3, 4]
: = alles
1:-1 vom element an index 1 bis element 1 weniger listenlenge
:2 alles vor element 2
2: element 2 bis listenende
2:4 element 2 bis vor element 4
Verfasst: Mittwoch 1. Oktober 2008, 16:02
von Sandra
Ich bin für jede Antwort dankbar, und versuche Tips an zu nehmen, doch frage halt manchmal nach, da ich es wirklich verstehen möchte, und nicht nur irgend welche Zeilen übernehmen
Ich denke, den Doppelpunkthabe ich jetzt auch verstanden.
Mit etwas Spielerei habe ich nun folgendes gebastelt:
Code: Alles auswählen
def sort1(li):
li, a = li[:], []
while(li):
m = li[0]
n = 0
for x in xrange(1,len(li)):
if li[x] < m:
m = li[x]
n = x
a.append(li.pop(n))
return a
mfg Sandra
Verfasst: Mittwoch 1. Oktober 2008, 17:37
von sea-live
@sandra
Ich bitte dich nochmals um aufklärung warumm du das ausdrücklich in dieser weise Realisieren möchtest.
es gab nun doch schon genügend einfacherer Lösungswege als deine Listen kopie und erstellung einer neuen sortierten Liste
du übergibst doch eine liste Diese soll unverändert bleiben und als rückgabe erhälst du eine sortierte liste
Dir sollte klar sein das das li in def nicht das li im hauptpfad ist wenn li=li[:] da steht
und somit kansst du mit der liste in def alles machen ohne die original zu zerstören !
Verfasst: Mittwoch 1. Oktober 2008, 17:42
von BlackJack
@sea-live: Sandra hat jetzt eine von ihr selbst geschriebene und komplett verstandene Lösung, warum muss sie sich Dir jetzt unbedingt erklären und eine andere Lösung nehmen?
Dein letzter Satz ist auch ziemlich unangebracht. Genau das hat sie ja verstanden. Das brauchst Du jetzt nicht noch einmal mit Nachdruck erklären.