首页 > 解决方案 > 合并重叠间隔产生 AttributeError

问题描述

给定一组区间,合并所有重叠区间。

例如:

给定[1,3],[2,6],[8,10],[15,18]

返回[1,6],[8,10],[15,18]

确保返回的间隔已排序。

class Solution:
    # @param intervals, a list of Intervals
    # @return a list of Interval
    def merge(self, intervals):
        A = intervals
        A.sort(key=lambda x: x.start)
        N = len(A)
        S = []
        if A:
            S.append(A[0])
            for i in range(1, N):
                B = A[i]
                if B.start <= S[-1].end:
                    S[-1].end = max(S[-1].end, B.end)
                else:
                    S.append(B)
        return S

X=[[1,3],[2,6],[8,10],[15,18]]
sol=Solution()
print(sol.merge(X))

编译后我得到一个错误:

  File "main.py", line 24, in <module>
    print(sol.merge(X))
  File "main.py", line 8, in merge
    A.sort(key=lambda x: x.start)
  File "main.py", line 8, in <lambda>
    A.sort(key=lambda x: x.start)
AttributeError: 'list' object has no attribute 'start'

但该解决方案被Interviewbit 接受

标签: pythonmerge

解决方案


只需实现一个最小Interval类即可让您的代码正确运行:

class Interval:
    def __init__(self, start, end):
        self.start, self.end = start, end
    def __repr__(self):
        return str([self.start, self.end])

或者您可以通过以下方式获得大致相同的结果namedtuple

from collections import namedtuple
Interval = namedtuple('Interval', ('start', 'end'))

并转换X为使用Intervals:

X = [Interval(*x) for x in X]

推荐阅读