【问题标题】: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)
          

          【讨论】:

            猜你喜欢
            • 2018-08-15
            • 2012-10-15
            • 2016-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-14
            • 2011-08-17
            • 1970-01-01
            相关资源
            最近更新 更多