Was macht: if x in myDict

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.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Was macht: if x in myDict

Beitragvon droptix » Samstag 30. Dezember 2006, 10:21

Beispiel:

Code: Alles auswählen

myDict = {
    1: "foo",
    2: "bar"
}


Entspricht:

Code: Alles auswählen

if 1 in myDict:
    pass


ungefähr dem hier:

Code: Alles auswählen

isIn(x, d):
    for i in d:
        if i == x:
            return True
    return False

if isIn(1, myDict):
    pass


Also wird über alle Keys iteriert und bei jedem einzelnen geprüft, ob es sich um den gesuchten Wert handelt? Oder behandelt das Python intern irgendwie schneller?
BlackJack

Beitragvon BlackJack » Samstag 30. Dezember 2006, 11:58

Die Semantik entspricht Deiner Schleife aber es ist schneller weil Dictionaries mit einer Hashtabelle implementiert sind, also in O(1) Zeit festgestellt werden kann, ob ein Schlüssel enthalten ist oder nicht.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Beitragvon droptix » Samstag 30. Dezember 2006, 15:23

Was meinst du damit?

BlackJack hat geschrieben:also in O(1) Zeit festgestellt werden kann, ob ein Schlüssel enthalten ist oder nicht.


Ist es signifikant schneller oder macht das in der Praxis kaum einen Unterschied?
BlackJack

Beitragvon BlackJack » Samstag 30. Dezember 2006, 16:23

droptix hat geschrieben:Was meinst du damit?

BlackJack hat geschrieben:also in O(1) Zeit festgestellt werden kann, ob ein Schlüssel enthalten ist oder nicht.


Ist es signifikant schneller oder macht das in der Praxis kaum einen Unterschied?


O(1) bedeutet in konstanter Zeit, also unabhängig von der Anzahl der Einträge. Wenn man die Schlüssel alle durchläuft um den richtigen zu finden, oder festzustellen, dass er gar nicht enthalten ist, dann macht es einen Unterschied wieviele Einträge enthalten sind.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Samstag 30. Dezember 2006, 17:40

Oder kurz gesagt: es ist signifikant schneller.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder