Probleme bei der Quicksortimplementierung. Hilfe :S

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.
Antworten
cherry_sunshine
User
Beiträge: 3
Registriert: Mittwoch 2. November 2011, 17:05

Hallo..ich arbeite momentan an dem Quicksortalgorithmus. Im Internet habe ich mir zur Hilfe verschiedene Implementierungen angeschaut und bin dabei auf eine gestoßen, die mich an 2 Stellen ziemlich verwirrt, da ich dem noch nie begegnet bin:
einmal:
"i for i in liste if i < pivot " wie darf ich das mit den 3 i's interpretieren?
sorry, mir erscheint das "i for i" irgendwie sinnlos...der Rest ergibt ja sinn, aber in dem Punkt bin ich überfragt... :roll:

und das zweite:
if __name__ == "__main__":
Das kann ich mir leider überhaupt nicht erklären. Was ist mit __name__ und was ist mit __main__ gemeint?

Tut mir leid, wenn die Fragen euch eventuell blöd erscheinen. Ich bin Einsteigerin, was das Programmieren zu tun hat und daher fehlt mir jegliches Grundwissen.
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Code: Alles auswählen

i for i in liste if i < pivot
ist eine list-comprehension, und __name__ ist der Name des Moduls, das ist kannst du hier nachlesen. Der __name__ des Moduls ist gleich __main__, wenn du auf der Konsole

Code: Alles auswählen

python meinmodul.py
aufrufst. So kann man steuern, was passieren soll, wenn das Skript importiert wird in ein anderes Modul, oder wenn man es von der Kommandozeile aufruft.

Nachtrag:
Die list-comprehension könnte man auch so schreiben:

Code: Alles auswählen

elements = []
for element in liste:
    if element < pivot:
        elements.append(element)
Zuletzt geändert von frabron am Montag 19. Dezember 2011, 11:51, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Zu 1:
das ist syntaktisch korrekt, das ganze heißt List Comprehension und wird hier erklärt: http://docs.python.org/tutorial/datastr ... rehensions
Allerdins hast du es in deinem Post aus dem Zusammenhang gerissen, denn korrekt müsste es so aussehen damit es Sinn macht:

Code: Alles auswählen

[i for i in liste if i < pivot]
Die eckigen Klammern stehen da ja nicht grundlos ;)

zu 2)
Das ist der übliche Weg um Code nur dann ausführen zu lassen wenn es nicht über den Import-Befehl importiert wurde. Dann ist __name__ nämlich "__main__".
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sparrow hat geschrieben: Die eckigen Klammern stehen da ja nicht grundlos ;)
Es könnten auch runde sein, wenn es sich um einen Generatorausdruck handelte ;-) Aber es stimmt schon, dass der Kontext wichtig ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Es könnten auch runde sein, wenn es sich um einen Generatorausdruck handelte ;-)
Oder sie können auch fehlen, wenn es ein Generatorausdruck in einem Funktionsaufruf als einziger Parameter ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten