python - 合并重叠间隔产生 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 接受。
解决方案
只需实现一个最小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
为使用Interval
s:
X = [Interval(*x) for x in X]
推荐阅读
- angular - 我可以在我的服务中使用小吃店吗?
- html - 获取背景图像以在两个背景图像之间重叠另一个背景图像元素
- vue.js - 完成请求后下载 - vue-json-excel
- .net - 从 R 调用 .Net 可执行文件时忽略配置文件
- python - 使用 Tkinter 的基于 Python 文本的游戏
- php - 正则表达式解析用逗号分隔的引号内
- angular - Angular 5路由器从回调导航什么都不做
- ios - 尽管存在 leftView,如何在 UITextField 中将文本居中?
- git - 第 17 行 /.../bootstrap/autoload.php 中允许的 xxxx 字节内存大小已用尽(尝试分配 xxxx 字节)
- sql - 如何通过我的 Ruby on Rails 应用程序以这种方法解决高响应时间