舍入和更新列表中的元素

round and update elements in a list

我有一个列表 lats,其中每个元素如下所示:

48.16821784360847
48.1684475413586
48.16839850451211

我想遍历整个列表,并更新列表,使每个项目四舍五入到小数点后 3 位。例如,新列表应为:

48.168
48.168
48.168

我正在尝试这个:

for i in lats:
    lats[i] = round(i, 3)

但它抛出一个错误:

TypeError: list indices must be integers or slices, not float

这样做:

for i,j in enumerate (lats):
    lats[i] = round(j, 3)

错误如下。 列表的元素是浮点数。因此,当您对其进行迭代时,i 等于该列表中的一个值。列表索引只能用整数来完成。 lats[i] 正在替换引发错误的浮点值

如果你这样做 for i in lats: i 将是数字(如 48.16821784360847)。如果您使用 for i in range(len(lats)): 而不是 i 将是 0,1,2 等等。

这会起作用:

for i in range(len(lats)):
    lats[i] = round(lats[i], 3)
print(lats)

错误说明一切 -

TypeError: list indices must be integers or slices, not float

问题出在你的for循环中-

for i in lats:

这样做是在每次迭代中获取 lats 中的每个元素,因此问题是您实际上是在尝试做 -

lats[48.16821784360847] = round(i, 3)

因此,你需要做 -

for i in range(len(lats)):

在你的解决方案中,我是纬度而不是它的索引。因此错误

列出补偿

lats[:] = [round(lat, 3) for lat in lats]

地图

lats[:] = map(lambda x: round(x, 3), lats)
lats[:] = map(lambda x: x.__round__(3), lats)