[Python] Strings in einem Tuple in Integer umwandeln

HanZ

Aktiver NGBler
Registriert
16 Juli 2013
Beiträge
997
Hallo zusammen,

gegeben ein Tuple

t1 = ('1', '2', '3')

dieses soll umgewandelt werden, sodass die Nummern nicht mehr als String, sondern als Integer in dem Tuple stehen, also

t2 = (1, 2, 3)

Gibt es dafür einen einfach Befehl? Es geht darum, Tuple miteinander zu vergleichen, aber die Vergleichsoperation gibt was falsches zurück, sofern die Elemente Strings sind.

lg
HanZ
 
Da du keine Werte in einem Tuple direkt überschreiben kannst, mußt du es neu anlegen.

Hier mal ein Beispielcode, auch mit Tests das man Tuples auch miteinander vergleichen kann zur Demonstration - kommt natürlich darauf an was genau du denn vergleichst - ein direkter Vergleich ist aber möglich.

Python 3:
[src=python]t1 = ("1", "2", "3")
t2 = ("1", "2", "3")
t3 = ("0", "2", "1")
// Nur Demo
print(t1)
print(t2)
print(t1 == t2)
print(t1 == t3)
// Demo Ende

tmp = [];
for value in t1:
tmp.append(int(value, 10))

t1 = tuple(tmp)
print(t1)[/src]

Ergibt bei mir dann folgende Ausgabe:
[src=text]('1', '2', '3')
('1', '2', '3')
True
False
(1, 2, 3)[/src]
 
Am kürzesten geht das per generator expression:
[src=python] t2 = tuple(int(i) for i in t1)[/src]

Aber ist das wirklich eine Lösung für dein eigentliches Problem? Was genau geht denn beim Vergleich der Strings schief?
 
  • Thread Starter Thread Starter
  • #4
Es geht darum Versionsnummern zu vergleichen, also ob z.B 0.9.1 kleiner als 0.12 ist.

Mit Strings wird denke ich mal eher die Länge des Tuples oder der Wert der 9 mit der 1 verglichen, es kommt also eine falsche Ausgabe.
[src=python]v1 = ('0', '9', '1')
v2 = ('0','12')
#ergibt
v1 < v2
False
[/src]

Bei:

[src=python]v1 = (0, 9, 1)
v2 = (0, 12)
#ergibt
v1 < v2
True
[/src]

stimmt das ganze jedoch.

[src=python]t2 = tuple(int(i) for i in t1)[/src]
Das funktioniert wunderbar. Vielen lieben Dank, Problem gelöst, Wochenende gerettet. :beer:
 
Bei Versionsnummern passt das. :T Einziges Problem könnten nicht-numerische Versionsnr. sein, weil int() ValueError schmeißt, wenn die Konvertierung nicht klappt. Z.B.:
[src=python]version = ('2', '3', '0', 'beta', '1')[/src]
Das kannst du aber auch umgehen, wenn du dir als int()-Ersatz eine int_default()-Funktion baust, die die Exception abfängt und einen sinnvollen Defaultwert zurückgibt.
 
  • Thread Starter Thread Starter
  • #7

Buchstaben oder sonstiges sind nicht in den Versionsnummern enthalten, von daher passt das.


Für die Zukunft merke ich mir das, hier jedoch bringt mir das nichts:
Es dürfen nur Module verwendet werden, die im Kurs besprochen wurden und die Aufgabe nicht direkt lösen.
 
Zurück
Oben