Hallo zusammen,
ich versuche, ein dictionary mit den Elementen einer Liste zu befüllen und danach auszugeben.
Es wäre saunett, wenn jemand mir kurz meine(n) Fehler erklären könnte!
Im Prinzip überprüfe ich mit folgendem kurzen Code, ob in einer Liste Elemente doppelt vorkommen und wenn ja, gibt die Funktion das erste solche Element zurück.
Dazu überprüfe ich, ob das betreffende Element bereits im Dictionary ist und schreibe es andernfalls rein...
Zwei Fragen:
- Warum funktioniert die Anweisung in Zeile 8 als Alternative zu Zeile 7 nicht? Sollte doch eigentlich dasselbe machen...
- Wie schaffe ich es, das erstellte und gefüllte dictionary auszugeben? Wollte das in Zeile 9 machen...
1 def duplicate(array):
2 hashy = {}
3 for index in array:
4 if hashy.get(index):
5 return index
6 else:
7 hashy[index] = True
8 #hashy.udpate({index: 'True'})
9 #print(hashy)
10 print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))
Also, falls jemand kurz die Zeit für diese Fragen findet, würd ich mich freuen!
dictionary mit list-elementen befüllen
Eingerückt wird mit 4 Leerzeichen pro Ebene, nicht 3.
Das was Du array nennst, ist eine Liste. Da die Funktion aber mit jedem iterierbaren Objekt arbeiten kann, würde man das gar nicht mit dem Namen so einschränken.
Das was Du `index` nennst, ist auch kein Index, sondern ein allgemeines Element.
Da Du mit dem Ergebnis von get gar nichts machst, willst Du wahrscheinlich nur den in-Operator verwenden.
Wenn man ein Element eines Wörterbuchs setzen will, benutzt man nicht update, was aber theoretisch auch funktionieren sollte, wenn es richtig geschrieben wäre.
Das `print` wird nie erreicht, weil Du die Schleife per `return` verläßt, und damit die Funktion.
Aber da Du den Wert des Wörterbuchs eh nicht brauchst, willst Du eigentlich ein `set` verwenden.
Das was Du array nennst, ist eine Liste. Da die Funktion aber mit jedem iterierbaren Objekt arbeiten kann, würde man das gar nicht mit dem Namen so einschränken.
Das was Du `index` nennst, ist auch kein Index, sondern ein allgemeines Element.
Da Du mit dem Ergebnis von get gar nichts machst, willst Du wahrscheinlich nur den in-Operator verwenden.
Wenn man ein Element eines Wörterbuchs setzen will, benutzt man nicht update, was aber theoretisch auch funktionieren sollte, wenn es richtig geschrieben wäre.
Das `print` wird nie erreicht, weil Du die Schleife per `return` verläßt, und damit die Funktion.
Aber da Du den Wert des Wörterbuchs eh nicht brauchst, willst Du eigentlich ein `set` verwenden.
Code: Alles auswählen
def duplicate(iterable):
seen = set()
for item in iterable:
if item in seen:
break
seen.add(item)
print(seen)
return item
print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))
- __blackjack__
- User
- Beiträge: 14055
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Den Randfall, das `iterable` leer ist könnte man noch anders lösen als den impliziten `NameError`/`UnboundLocalError`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Der Code hat noch den weiteren Fehler, falls es keine doppelten Einträge gibt.
Code: Alles auswählen
def duplicate(iterable):
seen = set()
for item in iterable:
if item in seen:
break
seen.add(item)
else:
raise ValueError("keine doppelten Einträge")
print(seen)
return item
print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))