#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)