gpt4 book ai didi

python-3.x - 类型错误:切片索引必须是整数或无或具有 __index__ 方法

转载 作者:行者123 更新时间:2023-12-04 16:21:17 27 4
gpt4 key购买 nike

在 IDLE 中运行代码时出现以下错误:

Traceback (most recent call last):   File "C:/Python34/inversion3.py",
line 44, in <module>
nInversions.inversionMergeSort(m) File "C:/Python34/inversion3.py", line 16, in inversionMergeSort
left = m[0:half] TypeError: slice indices must be integers or None or have an __index__ method

代码:-
from collections import deque

m = []
f = open("IntegerArray.txt")
for line in f:
m.append(int(line))

class InversionCount:

def __init__(self, n):
self.n = n
def inversionMergeSort(self, m):
if len(m) <= 1:
return m
half = len(m)/2
left = m[0:half]
right = m[half:]
left = self.inversionMergeSort(left)
right = self.inversionMergeSort(right)
return self.inversionSort(left, right)

def inversionSort(self, left, right):
leftQueue = deque(i for i in left)
rightQueue = deque(j for j in right)
orderedList = []
while len(leftQueue) > 0 or len(rightQueue) > 0:
if len(leftQueue) > 0 and len(rightQueue) > 0:
if leftQueue[0] <= rightQueue[0]:
orderedList.append(leftQueue[0])
leftQueue.popleft()
else:
orderedList.append(rightQueue[0])
self.n += len(leftQueue)
rightQueue.popleft()
elif len(leftQueue) > 0:
orderedList.append(leftQueue[0])
leftQueue.popleft()
elif len(rightQueue) > 0:
orderedList.append(rightQueue[0])
rightQueue.popleft()
return orderedList

nInversions = InversionCount(0)
nInversions.inversionMergeSort(m)
print (nInversions.n)

最佳答案

在 3.x 中,int/int 给出了一个浮点数。这不是一个整数。

>>> 3/2
1.5

所以你的第 15 行
        half = len(m)/2

使半个浮点数。你需要的是双斜线
        half = len(m)//2

根据需要在第 16 行的切片中使用它来制作半个 int。

关于python-3.x - 类型错误:切片索引必须是整数或无或具有 __index__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com