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

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

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

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

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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Oder kurz gesagt: es ist signifikant schneller.
Antworten