Получения ошибка:Список python интерпретируется как целое число; Подсчет инверсии
File "inversions.py", line 26, in merge
if left[i] < right[j]:
TypeError: 'int' object is not subscriptable
Моя реализация сортировки слияния, как это; принимает список и его длину. Базовый случай, когда длина 1, где я просто возвращает список (не как межд, но в виде списка):
def mergesort(arr, length):
if length == 1:
return arr
Рабочая слияния функции сортировки в не входящих в базовую случае ситуация:
n = length // 2
left = arr[:n]
right = arr[n:]
lsort = mergesort(left, len(left))
rsort = mergesort(right, len(right))
result = merge(lsort, rsort, length)
return result
Тогда есть функция слияния для слияния двух отсортированных вложенных списков, определяемых следующим образом:
def merge(left, right, length):
buff = []
i = j = count = 0
Эта функция слияния, очевидно, называется функцией сортировки слиянием после того как все рекурсивные вызовы выполняются.
Есть ли-ELSE заявления в этой функции слияния, которые обрабатывают это работает:
if left[i] < right[j]:
buff.append(left[i])
i += 1
if i == len(left):
for j in range(j, len(right)):
buff.append(right[j])
break
elif left[i] > right[j]:
buff.append(right[j])
j += 1
count += len(left) - i
if j == len(right):
for i in range(i, len(left)):
buff.append(left[i])
break
В конце концов, эта функция слияния возвращает «количество»; количество инверсий.
Судя по ошибке, кажется, что «left» и т. Д. Интерпретируются как целые числа, что дает мне ошибку индекса. Но я просто не могу понять, ПОЧЕМУ они являются ints, когда ясно, что они должны быть списками (или, может быть, я просто пропустил что-то очень очевидное).
Я просто не могу обдумать это. Любая помощь приветствуется! :)
напишите свой код здесь –
Вставьте здесь реорганизованный код; как текст. Если это долго, вам нужно создать минимальный пример, демонстрирующий вашу проблему. – Carcigenicate
Извините! Новенький тут. Я отредактировал его. Спасибо :) –