取得エラー:Pythonリストが整数として解釈されています。カウント反転
File "inversions.py", line 26, in merge
if left[i] < right[j]:
TypeError: 'int' object is not subscriptable
マージソートの私の実装はとても似ています。リストを受け取り、それは長さです。ベースケースは、私は単にリストを返す場合の長さは、1である場合には(ないintとして、しかしリストとして):非ベースケースの状況で
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
このマージ機能が明らかにマージソート機能によって呼び出されます。
は、次に以下の様に定義された2つのソートサブリストをマージするためのマージ機能があります。
それが働いて扱うこのマージ機能であれば、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
が最後では、このマージ関数が返す「数」;逆転の数。
エラーから判断すると、「左」などが整数として解釈されているため、添え字エラーが発生しているようです。しかし、私はちょうど彼らがリストであるべきであるときに、彼らがintである理由を理解することができません(または、おそらく私は何かを非常に明白に見逃しています)。
私はちょうどこれの周りに私の頭を得ることができません。すべての助けをいただければ幸いです! :)私はあなたのコードを見てきました
ここにコードを投稿 –
ここに再編成コードを直接貼り付けてください。テキストとして。それが長い場合は、問題を示す最小限の例を作成する必要があります。 – Carcigenicate
申し訳ありませんここに新しい。私はそれを編集しました。ありがとう:) –