"TypeError: индексы списка должны быть целыми числами или срезами, а не с плавающей точкой" - PullRequest
0 голосов
/ 19 июня 2020

Я Python новичок ie. Я хотел вычислить разницу между числами с плавающей запятой. Различия должны быть между числом после и числом перед. Итак, первая разница должна быть между вторым и последним числом. Вот мой код:

x = [811.91, 796.04, 796.14, 796.50, 796.81]

i = 0
for i in x:
    difference = x[i+1] - x[i-1]
    print(difference)

И я получаю «TypeError: индексы списка должны быть целыми или срезами, а не с плавающей точкой».

Ответы [ 5 ]

0 голосов
/ 19 июня 2020

В исходном вопросе при выполнении for x in list, x - это элемент в списке, а не индекс. Вот почему вы получаете ошибку TypeError. (также мне интересно, что «разница» означает вычитание, но не добавление?)

Вот рабочее решение в соответствии с вашим вопросом:

x = [811.91, 796.04, 796.14, 796.50, 796.81]

differencs = []
for i in range(len(x)):  # i = 0, 1, ..., x-1 
    before_idx = i-1
    after_idx = (i+1) % len(x)   # handle when i+1 exceeds the list length
    diff = x[after_idx] + x[before_idx]   # Please double check whether you need '+' or '-'
    differences.append(diff)

print(differences)

или краткая версия (с использованием понимания списка):

differences = [x[(i+1)%len(x)] + x[i-1] for i in range(len(x))]

print(differences)
0 голосов
/ 19 июня 2020

Ваш код перебирает элементы «x». Вы хотите перебрать индексы «x». И вам нужно «-», чтобы найти разницу. Вы можете использовать следующий код:

x = [811.91, 796.04, 796.14, 796.50, 796.81]

for i in range(1,len(x)):
    difference = x[i] - x[i-1]
    print(difference)
0 голосов
/ 19 июня 2020

Индексы должны быть только целыми числами.

В вашем случае вы использовали значения с плавающей запятой в качестве индексов.

for i in loop выбирает значения из списка, тогда как for i in range выбирает индексы. Пожалуйста, используйте следующее:

x = [811.91, 796.04, 796.14, 796.50, 796.81]
for i in range(0,len(x)-1):
    difference = x[i+1] + x[i-1]
    print(difference)
0 голосов
/ 19 июня 2020

for i in x: возвращает каждый элемент x как i, вам нужно что-то вроде

x = [811.91, 796.04, 796.14, 796.50, 796.81]

for i in range(0, len(x)-1):
    difference = x[i+1] + x[i-1]
    print(difference)

Но, вероятно, это все еще не дает того, что вы ожидаете получить. Предполагая, что вы хотите получить разницу между двумя последовательными элементами, выполните

x = [811.91, 796.04, 796.14, 796.50, 796.81]

for i in range(0, len(x)-1):
    difference = x[i+1] - x[i]
    print(difference)
0 голосов
/ 19 июня 2020

В данном случае i - это значение. Таким образом, делая +1 или -1, вы меняете значение. Вы хотели использовать index. Вы можете использовать enumerate (что дает вам индекс / значение как кортеж или range.

x = [811.91, 796.04, 796.14, 796.50, 796.81]

i = 0
for index, value in enumerate(x):
    difference = x[index+1] + x[index-1]
    print(difference)

Обратите внимание, что это все еще не работает . Вам нужна проверка, чтобы убедиться, что вы не go за пределы (+1 и -1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...