所以这是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
答案 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和更短。