如何在 Python 中將字串轉換為浮點或整數
-
在 Python 中通過
float()
將字串轉換為浮點數 -
在 Python 中通過
int()
將字串轉換為 int -
在 Python 中通過
ast.literal_eval
將字串轉換為float
或int
-
在 Python 中將字串轉換為浮點數時地本地化和逗號
,
情況 -
在 Python 中將字串轉換為
float
或int
的不同方法的效能比較
本教程文章將介紹如何在 Python 中將字串轉換為浮點數 float()
或整數 int()
。
在 Python 中通過 float()
將字串轉換為浮點數
float()
將字串轉換為 float
數字,如果可能的話。
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
在 Python 中通過 int()
將字串轉換為 int
int()
如果給定的字串是整數的表示形式,則可以將字串轉換為整數。否則會引發 ValueError
。
>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'
如果給定的字串是浮點數的表示形式,float
則可以先將其轉換為,然後再將其轉換為 int
。
>>> int(float('111.0'))
111
在 Python 中通過 ast.literal_eval
將字串轉換為 float
或 int
ast.literal_eval(string)
安全地評估包含 Python 表示式的給定字串。它可以將字串自動地轉換為 float
或 int
。
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
在 Python 中將字串轉換為浮點數時地本地化和逗號 ,
情況
如果字串表示形式中存在逗號 ,
,則 float
轉換將引發 ValueError
異常。但是逗號是常規的用法,例如在美國或英國等國家/地區用作千位分隔符 111,111.22
,或者在大多數歐洲國家/地區用作小數點 111,222
。
>>> float('111,111.22')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
float('111,111')
ValueError: could not convert string to float: '111,111'
應該使用 locale
模組來設定語言環境資訊,然後 locale.atof()
函式可以根據語言環境設定將給定的字串解析為浮點數。
在美國/英國,逗號作為千位分隔符
>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0
如果給出正確的語言環境設定,則逗號 ,
可以正確解釋。
還應注意的是,即使給定的字串表示形式是整數,轉換結果也始終是 float
型別。
在歐洲國家,逗號作為小數點
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
111,222
可以正確轉換為 111.222
,111.111,222
也可以正確轉換為 111111.222
,因為在荷蘭等歐洲國家/地區,.
用作千位分隔符。
在 Python 中將字串轉換為 float
或 int
的不同方法的效能比較
我們 timeit
用來檢查不同方法之間的效能表現。
>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917
ast.literal_eval()
方法比 float
方法慢得多。如果你只需要在 Python 中將字串轉換為 float
或 int
,則 ast.literal_eval()
不是首選。ast.literal_eval()
在此應用程式中屬於過度設計,因為其主要目標應該是評估包含 Python 表示式的字串。
locale.atof()
也非常慢,因此僅當在美國或英國的約定字串中存在逗號時才使用它,或者點 .
表示千位分隔符,而逗號 ,
在歐洲國家中表示小數點。換句話說,locale.atof()
如果確實需要,才應使用它。