在计算反转时索引超出范围

时间:2017-09-10 21:48:47

标签: python indices

我试图计算在命令行输入中作为参数给出的.txt文件中的反转次数。当它到达实际检查是否存在反转的行时,我得到索引超出范围错误。我已经尝试在每个循环中写下i和j中的位置和值,但我无法弄清楚如何阻止它超出范围。这是错误

File "./counting_inversions.py", line 31, in sortAndCountSplit
    if (l[i] <= r[j]):
IndexError: list index out of range

是否有其他人知道解决方案?

import argparse

def readFile():
    arg_parser = argparse.ArgumentParser(description='Print the given input file.')
    arg_parser.add_argument('filename', help='path to a file')
    args = arg_parser.parse_args()

    with open(args.filename, 'r') as in_file:
        n = int(in_file.readline())
        vals = [int(val) for val in in_file.readlines()]
    return([n, vals])

def sortAndCount(invList):
    if (len(invList) == 1):
        return (invList, 0)
    else:
        midpoint = int(len(invList) / 2)
        left, lc = sortAndCount(invList[:midpoint])
        right, rc = sortAndCount(invList[midpoint:])
        arr, sc = sortAndCountSplit(left, right)
        return (arr, (lc + rc + sc))


def sortAndCountSplit(l, r):
s = []
i = j = inversions = 0
for k in range((len(l) + len(r))):
    if ((i < len(l)) and (l[i] <= r[j]) or j >= len(r)):
        s.append(l[i])
        i += 1
    else:
        s.append(r[j])
        j += 1
        inversions += len(l) - i
return (s, inversions)

def main():
    file = readFile()
    print(sortAndCount(file[1]))

main()

0 个答案:

没有答案