2721 Stimmen

Wie kann ich eine Zeichenkette in einen Float oder Int parsen?

  • Wie kann ich eine str a float ?

    "545.2222"    545.2222
  • Wie kann ich eine str a int ?

    "31"          31

19 Stimmen

Generell gilt: Wenn Sie ein Objekt in Python haben und es umwandeln wollen, müssen Sie zu diese Art von Objekt, rufen Sie type(my_object) darauf. Das Ergebnis kann normalerweise als Funktion aufgerufen werden, um die Konvertierung durchzuführen. Zum Beispiel type(100) führt zu int so können Sie anrufen int(my_object) zu versuchen, zu konvertieren my_object in eine ganze Zahl umgewandelt. Das funktioniert nicht immer, ist aber eine gute "erste Vermutung" beim Programmieren.

6 Stimmen

int(x) if int(x) == float(x) else float(x)

5 Stimmen

@tcpaiva ValueError: invalid literal for int() with base 10: '1.5' .

83voto

Dino Viehland Punkte 1279
float(x) if '.' in x else int(x)

27 Stimmen

Hinweis: Seien Sie vorsichtig, wenn Sie Geldbeträge als Strings übergeben, da einige Länder "," als Dezimaltrennzeichen verwenden.

139 Stimmen

@Emile: Ich würde "2e-3" nicht als "Extremfall" bezeichnen. Diese Antwort ist einfach kaputt.

15 Stimmen

@BenG Manipulieren Sie das Geld nicht als Umlaufmittel. Das ist ein Grund für Ärger. Verwende Dezimalzahlen für Geld! (Aber Ihr Kommentar über ',' ist immer noch gültig und wichtig)

36voto

SethMMorton Punkte 40575

Wenn Sie nicht abgeneigt sind, Module von Drittanbietern zu verwenden, können Sie sich die fastnumbers Modul. Es bietet eine Funktion namens fast_real die genau das tut, wonach die Frage gestellt wird, und zwar schneller als eine reine Python-Implementierung:

>>> from fastnumbers import fast_real
>>> fast_real("545.2222")
545.2222
>>> type(fast_real("545.2222"))
float
>>> fast_real("31")
31
>>> type(fast_real("31"))
int

28voto

Wie kann ich in Python eine numerische Zeichenfolge wie "545.2222" in den entsprechenden Float-Wert 542.2222 umwandeln? Oder wie kann ich die Zeichenkette "31" in eine Ganzzahl, 31, umwandeln? Ich möchte nur wissen, wie man eine Float-Zeichenfolge in eine Float-Zeichenfolge und (separat) eine Int-Zeichenfolge in eine Int-Zeichenfolge parsen kann.

Es ist gut, dass Sie darum bitten, dies getrennt zu tun. Wenn Sie sie vermischen, könnten Sie sich später Probleme einhandeln. Die einfache Antwort ist:

"545.2222" zu schweben:

>>> float("545.2222")
545.2222

"31" in eine ganze Zahl umgewandelt:

>>> int("31")
31

Andere Konvertierungen, Ints in und aus Strings und Literalen:

Umrechnungen von verschiedenen Basen, und Sie sollten die Basis im Voraus kennen (10 ist der Standard). Beachten Sie, dass Sie ihnen das Präfix voranstellen können, das Python für seine Literale erwartet (siehe unten) oder das Präfix entfernen können:

>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31

Wenn Sie die Basis nicht im Voraus kennen, aber wissen, dass sie das richtige Präfix haben werden, kann Python dies für Sie ableiten, wenn Sie 0 als Basis:

>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31

Nicht dezimale (d.h. ganzzahlige) Literale aus anderen Basen

Wenn Ihre Motivation darin besteht, dass Ihr eigener Code bestimmte fest kodierte Werte eindeutig darstellt, brauchen Sie die Basen nicht zu konvertieren - das kann Python automatisch mit der richtigen Syntax für Sie erledigen.

Sie können die Apropos-Präfixe verwenden, um eine automatische Konvertierung in Ganzzahlen mit die folgenden Literale . Diese sind für Python 2 und 3 gültig:

Binär, Präfix 0b

>>> 0b11111
31

Oktal, Präfix 0o

>>> 0o37
31

Hexadezimal, Präfix 0x

>>> 0x1f
31

Dies kann bei der Beschreibung von Binärflags, Dateiberechtigungen im Code oder Hex-Werten für Farben nützlich sein - beachten Sie z. B. keine Anführungszeichen:

>>> 0b10101 # binary flags
21
>>> 0o755 # read, write, execute perms for owner, read & ex for group & others
493
>>> 0xffffff # the color, white, max values for red, green, and blue
16777215

Mehrdeutige Python-2-Oktale mit Python 3 kompatibel machen

Wenn Sie eine ganze Zahl sehen, die mit einer 0 beginnt, ist das in Python 2 die (veraltete) Oktal-Syntax.

>>> 037
31

Das ist schlecht, denn es sieht so aus, als sollte der Wert 37 . Daher wird in Python 3 nun ein SyntaxError :

>>> 037
  File "<stdin>", line 1
    037
      ^
SyntaxError: invalid token

Konvertieren Sie Ihre Python-2-Oktale in Oktale, die sowohl in 2 als auch in 3 funktionieren, mit der 0o Vorwahl:

>>> 0o37
31

27voto

Benutzer codelogic y Harley sind korrekt, aber bedenken Sie, wenn Sie wissen, dass die Zeichenkette eine ganze Zahl ist (z. B. 545), können Sie int("545") aufrufen, ohne vorher in Float zu casten.

Wenn Ihre Zeichenketten in einer Liste stehen, können Sie auch die Funktion map verwenden.

>>> x = ["545.0", "545.6", "999.2"]
>>> map(float, x)
[545.0, 545.60000000000002, 999.20000000000005]
>>>

Es ist nur gut, wenn sie alle vom gleichen Typ sind.

22voto

krzym Punkte 263

Die Frage scheint ein wenig alt zu sein. Aber lassen Sie mich eine Funktion vorschlagen, parseStr, die etwas Ähnliches macht, d.h. Integer oder Float zurückgibt, und wenn eine gegebene ASCII-Zeichenkette nicht in eine von ihnen umgewandelt werden kann, gibt sie sie unverändert zurück. Der Code kann natürlich angepasst werden, um nur das zu tun, was Sie wollen:

   >>> import string
   >>> parseStr = lambda x: x.isalpha() and x or x.isdigit() and \
   ...                      int(x) or x.isalnum() and x or \
   ...                      len(set(string.punctuation).intersection(x)) == 1 and \
   ...                      x.count('.') == 1 and float(x) or x
   >>> parseStr('123')
   123
   >>> parseStr('123.3')
   123.3
   >>> parseStr('3HC1')
   '3HC1'
   >>> parseStr('12.e5')
   1200000.0
   >>> parseStr('12$5')
   '12$5'
   >>> parseStr('12.2.2')
   '12.2.2'

12 Stimmen

1e3 ist in Python eine Zahl, in Ihrem Code aber ein String.

0 Stimmen

Ich bevorzuge diese Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X