Hallo, hätte mal eine Frage da ich gerade Python lerne und nicht weiterkomme. Ich habe zwei Listen mit Benutzernamen. Diese könnten groß, klein oder gemischt geschrieben worden sein. Ich möchte nun beide Listen mit einer schleife abgleichen aber beide Listen davor auf Kleinschreibung bringen, damit nicht der Benutzer "John", "JOhn", oder "John" z.B.vorkommen können. Sondern eben nur ein "John".
mein Code sieht so aus, alles geht nur ich weiß nicht wie ich die erste Liste auf Kleinschreibung zum abgleichen formatieren kann, da ich ja user.lower() machen kann aber nicht current_users.lower()
current_users = ['martin','peTer', 'hanS', 'sven', 'oliver']
new_users = ['Thilo','chris', 'Felix', 'Georg', 'Oliver']
for user in new_users:
if user in current_users:
print(user + " is already in use.")
else:
print("Username is free.")
Abgleich von Listen mit Groß/Kleinschreibung
Du kannst die current_users doch vor Beginn der Schleife einmal durchlaufen und klein machen:
Code: Alles auswählen
lowered_users = [user.lower() for user in current_users]
Und es macht natürlich Sinn, direkt neben der Original-Schreibweise auch die kleine Schreibweise für neue Benutzernamen zu speichern, falls möglich. Dann muss der Schritt nicht jedes Mal für die komplette Liste erfolgen.
Und schau dir mal den Datentyp set() an. Damit funktionieren in-Abfragen deutlich schneller, sofern man viele Elemente hat. Auch hier aber nur sinnvoll, wenn man das Set der aktuellen Benutzer "behalten" kann. Falls du immer nur an diese Liste kommst (z.B. über eine API geliefert), dann bleib bei der Liste.
Außerdem: Wenn man primär Mengenoperationen (wie `in`) benötigt, bietet sich eine Menge (→ `set`) eher an als eine Liste:
Mengenoperationen sind auf `set`s effizienter implementiert als auf Listen; und außerdem drück das `set` die Intention des Programmierers besser aus.
Wenn zusätzlich der Name in Originalschreibweise gespeichert werden soll, dann würde ich ein Wörterbuch nehmen:
Code: Alles auswählen
lowered_users = {user.lower() for user in current_users}
Wenn zusätzlich der Name in Originalschreibweise gespeichert werden soll, dann würde ich ein Wörterbuch nehmen:
Code: Alles auswählen
current_users = {user.lower(): user for user in current_users}
for user in new_users:
if user.lower() in current_users:
print("taken")
else:
print("free")