String mit Zahlen als inhalt einlesen - Vorkommen vergleichen

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
chris0086
User
Beiträge: 1
Registriert: Donnerstag 25. Juni 2020, 15:27

Hallo Leute,
ich bin ziemlich neu in Python und habe folgende Problemstellung wo ich nicht genau weis wie ich da am besten ran gehen muss.
Ich bekomme "von außen" eine Zeichenkette als String in eine Variable 'Zahlensammlung' geschrieben. Dabei kann der String so aussehen: Zahl1, Zahl2, Zahl3,... die Anzahl kann bis 255 gehen.
Zu einem späteren Zeitpunkt bekomme ich in eine andere Variable 'Vergleichswert' eine Zahl, zum Beispiel 3.

Jetzt möchte ich mein prüfen ob 'Vergleichswert' in 'Zahlensammlung' vorkommt. Wenn ja dann true, wenn nicht dann false.

Wie geh ich da am besten ran? Bzw. wie kann ich diesen String effizient durchsuchen?

Grüße Christian
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@chris0086: Man würde die Zeichenkette an den Kommas zerlegen und die Einzelteile in Zahlen umwandeln. Wenn Test auf enthaltensein die einzige Operation ist, die dann damit gemacht werden soll, würde sich ein `set()` anbieten und der ``in``-Operator.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

  1. Text nach komma splitten -> liste mit strings
  2. jeden string in den Datentyp integer (ganzzahl) umwandeln -> liste mit integer
  3. in-operator verwenden um zu prüfen ob das gesuchte Objekt in der Liste ist.

Code: Alles auswählen

text = "1,2,3,4,5,6,7,8,9"

# Erst den String mit der methode split(",") in eine Liste umwandeln.
liste = text.split(",")

# In der Liste sind strings, die nach int umgewandelt werden müssen
liste_zahlen = [int(element) for element in liste]

# wir suchen nach 5
gesucht = 5

if gesucht in liste_zahlen:
    print(gesucht, "ist in liste_zahlen enthalten")
Kann man auch kürzer machen:

Code: Alles auswählen

text = "1,2,3,4,5,6,7,8,9"
gesucht = 5

zahlen = [int(element) for element in text.split(",")]
if gesucht in liste_zahlen:
    print(gesucht, "ist in liste_zahlen enthalten")
In beiden Beispielen fehlt das Exception-Handling.
Wenn dein String z.B. mit einem Komma endet, gibt es einen ValueError, da das letzte Element dann ein leerer String ist.

Falls du den Fehler abfangen willst, ist eine normale for-schleife einfacher.
In einer list-comprehension geht das nicht. Dann müsste man jeden string prüfen, ob es auch Zahlen sind.

Code: Alles auswählen

text = "1,2,3,4,5,6,7,8,9," # Komma am Ende

# vorher
liste_zahlen = [int(element) for element in text.split(",")]
# ValueError


#nachher
liste_zahlen = [int(element) for element in text.split(",") if element.isnumeric()]
# funktioniert,  kein Fehler
# es werden nur str in die Liste aufgenommen, die bei isnumeric() True zurückliefern

# oder als for-schleife
liste_zahlen = []
for element in text.split(","):
    if element.isnumeric():
        value = int(element)
        liste_zahlen.append(value)

# diesmal mit Fehlerbehandlung
liste_zahlen = []
for element in text.split(","):
    try:
        value = int(element)
    except ValueError:
        pass
    else:
        liste_zahlen.append(value)

Quellen:
https://docs.python.org/3/library/functions.html#int
https://docs.python.org/3/library/stdtypes.html#str
https://docs.python.org/3/library/stdtypes.html#list
https://docs.python.org/3/reference/expressions.html#in

Schau dir die Methoden str.split und str.isnumeric an.
Den operator in
Die Methoden von list
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten