我的列表为:
list = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
我想检查字符串是否是foat,然后将其转换为float 如果该字符串是int,则应将其转换为int。
所需的输出:
list = [67.50, 70, 72.50, 75, 77.50, 80, 82.5]
答案 0 :(得分:5)
您可以使用float.is_integer()
:
>>> lst = ['67.50', '70.00', '72.50', '75.00', '77.50', '80.00', '82.50']
>>> [int(x) if x.is_integer() else x for x in map(float, lst)]
[67.5, 70, 72.5, 75, 77.5, 80, 82.5]
答案 1 :(得分:2)
这是使用列表理解的一种方法,并检查将给定字符串转换为float的模运算符是0.0
,然后将其转换为float
或integer
。 / p>
还请注意,不可能直接使用内置的int
函数从带小数的字符串中构造一个整数,以解决此问题,我正在使用f-strings,其中{{1 }}将给定数字打印为定点数字,在这种情况下,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]
下的python版本,请使用3.6
进行字符串格式化:
.format
答案 2 :(得分:1)
这行得通,但是也许有更好的方法。它可以处理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]
答案 3 :(得分:1)
这是另一个版本:
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'>