【问题标题】:Python inversions counter: slice indicies errorPython 反转计数器:切片索引错误
【发布时间】:2013-08-09 06:06:47
【问题描述】:

我正在尝试编写一个反转计数器,它将整数列表作为输入并输出反转次数。由于它将处理大型列表,因此我使用了分而治之的递归方法,但出现以下错误:

Traceback (most recent call last):
  File "C:\Users\Jonathan\Desktop\py.py", line 34, in <module>
    Inversions([1,2,3,4,5], 5)
  File "C:\Users\Jonathan\Desktop\py.py", line 13, in Inversions
    x = Inversions(numbers[:length/2 - 0.5], length/2-0.5)
TypeError: slice indices must be integers or None or have an __index__ method

这是我的代码:

def Inversions(numbers, length):
    if length == 0:
        return 0
    else:
        if length%2 == 0:
            x = Inversions(numbers[:length/2], length/2)
            y = Inversions(numbers[length/2:], length/2)
            b = sorted(numbers[:length/2], length/2)
            c = sorted(numbers[length/2:], length/2)
            z = Split(b, c)
            return x+y+z
        elif length%2 == 1:
            x = Inversions(numbers[:length/2 - 0.5], length/2-0.5)
            y = Inversions(numbers[length/2 - 0.5:], length/2-0.5)
            b = sorted(numbers[:length/2 - 0.5], length/2-0.5)
            c = sorted(numbers[length/2 - 0.5:], length/2-0.5)
            z = Split(b, c)
            return x+y+z
def Split(first, second):
    i = 1
    j = 1
    d = []
    inversions = 0
    for k in range(1,len(b)+1):
        if b[i] < C[j]:
            d[k] = b[i]
            i += 1
        else:
            d[k] = c[j]
            inversions += len(b[i:])
            j += 1
    return inversions

Inversions([1,2,3,4,5], 5)

【问题讨论】:

    标签: python list compiler-errors slice


    【解决方案1】:

    length 是偶数,这会导致非整数浮点数。改用整数除法。

    x = Inversions(numbers[:length // 2], length // 2)
    

    【讨论】:

    • 仍然在列表索引为长度//2 - 0.5 的行上收到错误。尝试将它们更改为 1/2,但没有用。我如何制作这些整数而不是浮点数?另请注意,示例列表的长度为奇数,因此应将其传递给 elif 语句,而不是 if 语句。
    • 我会给你更多的时间……想一想。
    • 1/2 的双斜线,明白了。谢谢你。现在有一个不同的错误,但如果不是一件事,那就是另一件事。
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2012-06-14
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多