Aufgaben in der Schule

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Donnerstag 12. März 2009, 20:21

@Leonidas: Der Name `iterable` ist unpassend. Wenn es wirklich für beliebige `iterable` funktionieren soll (ungetestet):

Code: Alles auswählen

def minmax(iterable):
    values = iter(iterable):
    try:
        min_value, max_value = values.next()
    except StopIteration:
        raise ValueError('empty iterable')
    for value in values:
        min_value = min(min_value, value)
        max_value = max(max_value, value)
    return (min_value, max_value)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 12. März 2009, 21:49

Blade Runner hat geschrieben:
HWK hat geschrieben:Dazu braucht man sorted nicht, es reicht liste.sort().
Das macht doch hier keinen Unterschied.

10111, das ist genau ice2k3s Lösung.
Das macht schon einen Unterschied. Warum soll man unnötigerweise eine neue Liste erzeugen, wenn ich bereits eine Liste besitze, die ich an Ort und Stelle sortieren kann?
MfG
HWK
BlackJack

Donnerstag 12. März 2009, 22:03

Zum Beispiel weil die Leute von einer Funktion die Minimum und Maximum einer Liste bestimmt, vielleicht erwarten, das diese Funktion die Liste nicht einfach so umsortiert!? `min()` und `max()` machen das ja auch nicht.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 12. März 2009, 22:30

Aber das vorgeschlagene

Code: Alles auswählen

liste = sorted(liste)
macht ja genau das. Und da ist doch

Code: Alles auswählen

liste.sort()
, was zum selben Ergebnis führt, offensichtlich weniger aufwendig, da es keine neue Liste erzeugt.
MfG
HWK
Benutzeravatar
Blade Runner
User
Beiträge: 21
Registriert: Montag 23. Februar 2009, 11:41

Donnerstag 12. März 2009, 22:34

HWK hat geschrieben:Aber das vorgeschlagene

Code: Alles auswählen

liste = sorted(liste)
macht ja genau das.
Ich war zu faul

Code: Alles auswählen

kopie = sorted(liste)
zu schreiben. ;)
[quote="Roy Batty"]All those moments will be lost in time, like tears in rain ... time to die.[/quote]
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 12. März 2009, 22:39

macht ja genau das.
Nö. Du legst den Namen liste neu an mit der neuen Liste, die alte Liste ist dann einfach nicht mehr erreichbar. Zumindest wenn man von einer Funktion ausgeht und das nicht auf Modulebene geschieht.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Donnerstag 12. März 2009, 22:43

Ich denke mal, es ging BlackJack eher um das Szenario, wenn das in einer Funktion steht. Dann wird nämlich in dem einen Fall das empfangene Argument verändert, dh die Liste ist beim Aufrufer nach dem Aufruf verändert, was ganz sicher nicht das erwartete Verhalten ist, im anderen Fall nicht. Man müsste also erst eine Kopie der Liste erstellen. Wenn man das erst macht, gibt es aber auch keinen Grund, nicht `sorted()` zu verwenden.

Edit: Ich schreibe wohl offensichtlich zu langsam.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Freitag 13. März 2009, 18:15

cofi hat geschrieben:@INFACT Nur sollte man dabei keine built-ins überschreiben ;)

@baGX http://www.python-forum.de/topic-1689.html
Ansonsten kannst du dich auch vertrauensvoll an die offizielle Dokumentation wenden ( -> http://docs.python.org/)

Das ist zwar der eleganteste Weg die Aufgabe zu lösen, aber ich glaube aber ehrlich gesagt nicht, dass der Lehrer das im Sinn hatte.
Dabei werden keine builtins überschrieben:

Code: Alles auswählen

>>> def foo(list):
	print list

	
>>> foo("asdfgsdfg")
asdfgsdfg
>>> a=list()
>>> a
[]
>>> 
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
Blade Runner
User
Beiträge: 21
Registriert: Montag 23. Februar 2009, 11:41

Freitag 13. März 2009, 18:39

Code: Alles auswählen

min = list[0]
max = list[0]
for item in list:
  if item > max:
    max = item
  if item < min:
    min = item 
min und max sind die builtins.

edit: richtigen Code eingefügt.
Zuletzt geändert von Blade Runner am Freitag 13. März 2009, 18:46, insgesamt 2-mal geändert.
[quote="Roy Batty"]All those moments will be lost in time, like tears in rain ... time to die.[/quote]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. März 2009, 18:41

INFACT hat geschrieben:Dabei werden keine builtins überschrieben:
Doch, lokal in der Funktion. Auch das sollte man vermeiden, denn wenn die Funktion etwas länger ist kann es durchaus vorkommen dass man dort irgendwo ``list()`` aufrufen will und wenn dann ein komischer Fehler kommt ist das unpraktisch.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Freitag 13. März 2009, 20:51

Ok, überzeugt :roll:
:wink:
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Antworten