1) Das hier tut nicht, was du glaubst, dass es tut:
Wenn man diesen Code auf Deutsch übersetzt kommt heraus:
Nimm den String in liste, erzeuge davon eine utf-8 kodierte Version, und wirf diese anschließend weg. Tatsächlich sind Strings (und auch unicode Objekte) in Python unveränderbar.
2) Das hier ist das klassische Python-Antipattern:Statt dessen solltest du direkt über die Elemente der Liste iterieren:
oder, wenn du den Index jedes Elements zusätzlich brauchst:
Code: Alles auswählen
for i, elem in enumerate(liste):
...elem...
...liste[i]...
3) In Python 2 sind
str Objekte
str Objekte und
unicode Objekte sind
unicode Objekte. In Python 3 ist beide dasselbe und heißt
str, und der Name
unicode wird nicht mehr verwendet. Nun möchte
hashlib.hash.update() aber kein unicode sehen, sondern byte-Buffer,
was auch in der Dokumentation steht.
Wenn man das alles beherzigt, sollte ungefähr sowas herauskommen:
Code: Alles auswählen
#!/usr/bin/python3
import hashlib
m = hashlib.md5()
liste = ["hans", "meier", "schulze", "schmidt"]
for elem in liste:
print(elem)
elem = elem.encode("utf-8")
m.update(bytes(elem))
print(m.hexdigest())
Ergebnis:
Code: Alles auswählen
hans
f2a0ffe83ec8d44f2be4b624b0f47dde
meier
07fe44f69a4a7659fb0c6b697c7a81dd
schulze
5d7447524aac4be48c4491f5d21bd3e3
schmidt
e69816ae7b27b702014ef6b6993ad45f
In specifications, Murphy's Law supersedes Ohm's.