合并重叠间隔

时间:2018-06-04 22:34:13

标签: python

所以这是Python中合并间隔的解决方案,但是在运行此代码时,它会引发一些错误。

from collections import namedtuple
pair = namedtuple('pair', 'first second')


def find_merge_interval(v1):
    if v1 == None and len(v1) == 0:
        return None


    v2 = []
    v2.append(pair(v1[0].first,v1[0].second))

    for i in xrange(1, len(v1)):
        x1 = v1[i].first
        y1 = v1[i].second
        x2 = v2[len(v2)-1].first
        y2 = v2[len(v2)-1].second

        if y2 >= x1:
            v2[len(v2)-1].second = max(y1,y2)
        else:
            v2.append(pair(x1,y1))
    return v2;


if __name__=="__main__":
    v1 = [pair(1,5), pair(3,7), pair(4,6), pair(6,8), pair(10,12), pair(11,15)]
    v2 = main (v1)
    print v2

我在修改输出后得到的错误是:

Traceback (most recent call last):
File "C:/Python27/merge_interval.py", line 29, in <module>
v2 = main (v1)
NameError: name 'main' is not defined

1 个答案:

答案 0 :(得分:0)

错误说main未定义,因为它未定义。有些语言要求你有一个名为“main”的主函数,但Python没有。它只是调用启动程序__main__模块,因为您可以在代码底部附近看到它。您的倒数第二行尝试调用函数main但不存在。因此错误。

尝试用

替换该行
v2 = find_merge_interval(v1)

并继续从那里调试代码。

另一个错误在你的行

v2[len(v2)-1].second = max(y1,y2)

您将v2设置为命名元组的列表,但元组是不可变的,无法更改。但无论如何你试图改变一个。您可以将v2[len(v2)-1]设置为不同的命名元组,但不能更改其中的一部分。看看你是否可以将整个元组重置为新的元组。顺便说一句,写v2[-1]会更加pythonic和更短。