Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串列表转换为Int或Float(如果可用)_Python_Python 3.x_List - Fatal编程技术网

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'>