округление и обновление элементов в списке

#python #python-3.x #list #typeerror

Вопрос:

У меня есть список lats , где каждый элемент выглядит так:

 48.16821784360847
48.1684475413586
48.16839850451211
 

Я хочу повторить весь список и обновить список таким образом, чтобы каждый элемент был округлен до 3 знаков после запятой. Например, новый список должен быть :

 48.168
48.168
48.168
 

Я пытаюсь это сделать :

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

но это приводит к ошибке, которая :

Ошибка типа: индексы списка должны быть целыми числами или срезами, а не плавающими

Ответ №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[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)