Python 将字符串列表转换为Int或Float(如果可用)
我的名单如下:Python 将字符串列表转换为Int或Float(如果可用),python,python-3.x,list,Python,Python 3.x,List,我的名单如下: list = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50'] 我想检查字符串是否是foat,然后它应该转换为浮点 如果字符串是int,那么它应该被转换成int 期望输出: list = [67.50, 70, 72.50, 75, 77.50, 80, 82.5] 下面是一种使用列表理解的方法,检查转换为float的给定字符串的模运算符是否为0.0,将其转换为float或整数 还要注意的是,不可能
list = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
我想检查字符串是否是foat,然后它应该转换为浮点
如果字符串是int,那么它应该被转换成int
期望输出:
list = [67.50, 70, 72.50, 75, 77.50, 80, 82.5]
下面是一种使用列表理解的方法,检查转换为float的给定字符串的模运算符是否为
0.0
,将其转换为float
或整数
还要注意的是,不可能直接使用内置的int
函数从带小数的字符串构造整数,为了克服这个问题,我正在使用g
将给定的数字打印为定点数字,在这种情况下0
小数位:
l = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
[int(f'{float(i):g}') if float(i)%1 == 0. else float(i) for i in l]
# [67.5, 70, 72.5, 75, 77.5, 80, 82.5]
对于3.6
下的python版本,请使用.format
进行字符串格式设置:
[int('{0:g}'.format(float(i))) if float(i)%1 == 0. else float(i) for i in l]
# # [67.5, 70, 72.5, 75, 77.5, 80, 82.5]
您可以使用float.is\u integer()
:
这很有效,但可能有更好的方法。它处理75.00这样的情况,您希望将其转换为整数而不是浮点
from math import floor
list = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
print([int(floor(float(l))) if float(l)-floor(float(l)) == 0 else float(l) for l in list])
输出为
python test.py
[67.5, 70, 72.5, 75, 77.5, 80, 82.5]
以下是另一个版本:
list = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
new_list = []
for x in list:
float_x = float(x)
int_x = int(float_x)
if int_x == float_x:
new_list.append(int_x)
else:
new_list.append(float_x)
for y in new_list:
print(type(y))
返回:
<class 'float'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
关于70
?关于@devesh呢?我的意思是,如果'70'
是listWell中的一个元素,假设有整数,但显然所有数字都是十进制的,那么代码将抛出一个异常@deveshkumarsing现在应该使用int-tooth。这是一个很好的列表(可能已经过时,但很有启发性)关于什么可以和不可以解析为浮点。但在您的情况下,查看数字中是否有小数点就足够了,如果没有小数点,则解析为int-else-float:[float(n)if.”在n-else-int(n)中表示n-in-list]
这一点也很接近:该映射(float,lst)是智能的。我也同意使用lst而不是list作为变量名,因为list也是Python的内置函数。
<class 'float'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>