如何在 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() 如果確實需要,才應使用它。
