Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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 如何将浮点数转换为列表中的整数_Python - Fatal编程技术网

Python 如何将浮点数转换为列表中的整数

Python 如何将浮点数转换为列表中的整数,python,Python,我有下面的代码,它获取了一个系数列表,这些系数是浮点数,我想把那些实际上是整数的变成整数,例如2.0,我想变成2 我有下面的代码,3个打印函数的输出是: [0.0.-0.0.-0.-0.-0.0.0.50.] 及 [ 0. 0. 0. 0. 0. 0. 0. 0. 0.5 0. ]. 因此,在打印的基础上,它输入if语句,这意味着它确认我的系数实际上是整数,我也尝试了is_integer函数,得到了相同的结果,但出于某种原因,它没有将它们转换为整数。有人能帮我吗

我有下面的代码,它获取了一个系数列表,这些系数是浮点数,我想把那些实际上是整数的变成整数,例如2.0,我想变成2

我有下面的代码,3个打印函数的输出是: [0.0.-0.0.-0.-0.-0.0.0.50.]

及 [ 0. 0. 0. 0. 0. 0. 0. 0. 0.5 0. ]. 因此,在打印的基础上,它输入if语句,这意味着它确认我的系数实际上是整数,我也尝试了is_integer函数,得到了相同的结果,但出于某种原因,它没有将它们转换为整数。有人能帮我吗?谢谢大家!

def function(coeffs):    
    coeffs = np.round(coeffs,2)
    print(coeffs)
    for w in range(len(coeffs)):
        if coeffs[w]-int(coeffs[w])==0.0:
            coeffs[w] = int(coeffs[w])
            print(coeffs[w])
    print(coeffs)

可以在循环中添加类型检查条件,例如 如果intcoefs[w]==coefs[w],因为我怀疑它作为解决方案会更健壮

另外,我建议创建一个新的列表或使用lambda,例如修改列表,或者在本例中,一个numpy数组,它在访问它的同时具有一个设置的数据类型,通常会造成陷阱

以下内容应该可以很好地工作

new_coeffs = []
def function(coeffs):    
    coeffs = np.round(coeffs,2)
    print(coeffs)
    for w in range(len(coeffs)):
        if int(coeffs[w]) == coeffs[w]:
            new_coeffs.append(int(coeffs[w]))
        else:
            new_coeffs.append(coeffs[w])
    print(new_coeffs)
这将产生以下结果,我怀疑这正是您所需要的

>>> new_coeffs = []
>>> a = [1.0, 2.0, 4.1, -8.0, -1.3]
>>> function(a)
[ 1.   2.   4.1 -8.  -1.3]
[1, 2, 4.1, -8, -1.3]

您的数据看起来可能是一个numpy数组,带有float数据类型。 您正在将整数赋回到这个numpy浮点数组中。 这不会更改单个条目的类型,因为numpy数组中的所有条目只有一种类型

您可以生成一个新的Python列表,其结果如下所示

类似这样的工作原理:


result=[intx if x-roundx执行此操作的一种方法是检查ceil和floor函数是否返回相同的值

import math
...
for w in range(len(coeffs)):
    if math.floor(coeffs[w]) == math.ceil(coeffs[w]):
        print(int(coeffs[w]))

这将是一个很好的使用列表理解的地方。我不太清楚为什么你给出的代码不起作用,但我可以给你一些代码,让它起作用

coeffs = [int(x) if x.is_integer() else x for x in coeffs]

这一行通过你的系数数组,对于每一个x,它用你提到的is_integer函数检查它是否是一个整数。如果是,则添加intx,否则添加float本身。

只是好奇。你需要将值转换为int是否有特定的原因?它只是为了打印目的?如果是,为什么不只是格式化输出这样就不会打印十进制数字了?
coeffs = [int(x) if x.is_integer() else x for x in coeffs]