Python 如何对向量数组的值进行舍入

Python 如何对向量数组的值进行舍入,python,arrays,vector,rounding,Python,Arrays,Vector,Rounding,我正在编写Python代码,需要对以下数组的值进行四舍五入: P = [[3.2, 3.7, 2.1], [4.5, 2.1, 2.3], [3.1, 2.5]] 最后得到: P= [[3, 4, 2], [5, 2, 2], [3, 3]] 我尝试了下面的方法,但不起作用 for i in range(len(P)): P[i] = int(round(P[i], 0)) 您可以使用列表理解: P= [[3.2, 3.7, 2.1],

我正在编写Python代码,需要对以下数组的值进行四舍五入:

P = [[3.2, 3.7, 2.1],
    [4.5, 2.1, 2.3],
    [3.1, 2.5]]
最后得到:

 P= [[3, 4, 2],
     [5, 2, 2],
     [3, 3]]
我尝试了下面的方法,但不起作用

  for i in range(len(P)):
    P[i] = int(round(P[i], 0))

您可以使用列表理解:

P= [[3.2, 3.7, 2.1],
    [4.5, 2.1, 2.3],
    [3.1, 2.5]]

P2 = [[int(round(x,0)) for x in y] for y in P]
# P is your list of lists
# y is each inner list
# x is each element in y
# rounding logic is as yours

print(P2)
输出:

 [[3, 4, 2], [5, 2, 2], [3, 3]]

编辑:2.7和3.6表现不同-我使用了2.7 shell

注意float的round()行为可能令人惊讶:例如 例如,四舍五入(2.675,2)得到的是2.67,而不是预期的2.68。这 这不是一个错误:这是由于大多数小数 不能精确地表示为浮点数。有关更多信息,请参阅

您可以通过创建自己的round方法来修复它:

def myRounder(num):
    return int(num)+1 if num - int(num) >= 0.5 else int(num)    

P= [[3.2, 3.7, 2.1],
    [4.5, 2.1, 2.3],
    [3.1, 2.5]]

P2 = [[int(myRounder(x)) for x in y] for y in P]
# P is your list of lists
# y is each inner list
# x is each element in y
# rounding logic is as yours

print(P2)

这将在2.7和3.x上产生相同的结果。

因为这是一个列表列表,请尝试进行第二级迭代。你好,帕特里克!它可以工作,但我的输出和你不一样。我不知道为什么我的控制台将0.5舍入最小值(0,不是1)。“你知道如何修复它吗?”胡安帕布罗西尔瓦斯勒编辑,添加了解释和修复。