【问题标题】:round and update elements in a list舍入和更新列表中的元素
【发布时间】:2021-10-14 20:40:48
【问题描述】:
我有一个列表lats,其中每个元素如下所示:
48.16821784360847
48.1684475413586
48.16839850451211
我想遍历整个列表,并更新列表,使每个项目四舍五入到小数点后 3 位。例如,新列表应该是:
48.168
48.168
48.168
我正在尝试这个:
for i in lats:
lats[i] = round(i, 3)
但它会抛出一个错误:
TypeError:列表索引必须是整数或切片,而不是浮点数
【问题讨论】:
标签:
python
python-3.x
list
typeerror
【解决方案1】:
这样做:
for i,j in enumerate (lats):
lats[i] = round(j, 3)
错误如下。
列表的元素是浮点数。因此,当您对其进行迭代时,i 等于该列表中的一个值。列表索引只能用整数来完成。 lats[i] 正在替换一个引发错误的浮点值
【解决方案2】:
如果你这样做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)
【解决方案3】:
错误不言自明-
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)):
【解决方案4】:
在您的解决方案中,i 是纬度而不是它的索引。因此错误
列表组合
lats[:] = [round(lat, 3) for lat in lats]
地图
lats[:] = map(lambda x: round(x, 3), lats)
lats[:] = map(lambda x: x.__round__(3), lats)