计数反转时索引超出范围

2024-09-28 16:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算命令行输入中作为参数给出的.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()

Tags: inparserlenreturnifdefargargs