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

时间:2019-02-02 18:24:00

标签: python

下面有一段代码,其中包含一个浮点系数列表,我想将实际上是整数的那些转换为整数(例如2.0,我想变成2)。

所以我有下面的代码,这三个打印功能的输出是: [ 0. 0. -0. 0. -0. -0. -0. 0. 0.5 0. ]

0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0

[ 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)

4 个答案:

答案 0 :(得分:1)

您的数据可能看起来像是一个numpy数组,带有float dtype。 您正在分配整数回到这个numpy的float数组。 这不会改变个别条目的类型,如numpy的阵列仅具有一个类型的阵列中的所有条目。

您可以产生与结果的新的Python列表。

类似的作品:

result = [ int(x) if x-round(x)<0.0001 else x for x in np.array([1.1, 2.0, 3]) ]

答案 1 :(得分:0)

您可以在循环中添加类型检查条件,例如 if int(coeffs[w]) == coeffs[w],因为我怀疑这将是作为一种解决方案更坚固。

此外,我建议创建一个新列表或使用lambda作为修改列表(或在这种情况下,使用numpy数组,该数组具有 set 数据类型)在您访问它的同时,通常会造成陷阱。

以下内容应该很好用。

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]

答案 2 :(得分:0)

执行此操作的一种方法是检查ceilfloor函数是否返回相同的值。对于这样的浮点应该相同。

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

答案 3 :(得分:0)

这将是使用列表理解的好地方。我不明白为什么你给的代码不能正常工作,但我可以给你的代码这将使它的工作。

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

此行通过您的coeffs数组,并且对于每个x,使用您提到的is_integer()函数检查它是否为整数。如果是,则添加int(x),否则添加浮点数本身。