python - 在python中获取具有最高和最低x和y值的点
问题描述
这看起来很简单,但我想尽可能高效地做到这一点。
实际上,我对最高、最低、最右边和最左边的点感兴趣。
给定一个像[[10,2],[0,2],[1,10],[1,0],[2,3],[5,2],[7,2],[7,3],[3,8],[6,1]]
我已经做到了
max_x = max([p[0] for p in pts])
min_x = min([p[0] for p in pts])
max_y = max([p[1] for p in pts])
min_y = min([p[1] for p in pts])
但我不仅需要max_x
价值。我需要整点,我宁愿不重复列表而不是需要(为了大输入的速度)。
如果它对于 N 维点(每个维度中的最高和最低)是通用的,则加分。
解决方案
使用key
参数,这样您就可以在仅比较一项时返回整个点。
from operator import itemgetter
max_x = max(p, key=itemgetter(0))
min_x = min(p, key=itemgetter(0))
max_y = max(p, key=itemgetter(1))
min_y = min(p, key=itemgetter(1))
您也可以使用单个循环来执行此操作,而不是调用min()
and max()
。
min_x = max_x = min_y = max_y = p[0]
for point in p[1:]:
if point[0] < min_x[0]:
min_x = point
if point[0] > max_x[0]:
max_x = point
if point[1] < min_y[1]:
min_y = point
if point[1] > max_y[1]:
max_y = point
推荐阅读
- mysql - Mysql 时间格式 Ymd H:i:s 未按预期工作
- javascript - 选择项目时自动关闭导航
- mysql - 如何在mysql数据库中插入不带减号的负值?
- javascript - Vue CLI 3 - 构建不会因 lint 错误而失败
- angular - 如何使用 Angular 5 保存生成的 QR 码图像
- android - 在共享首选项中选择、裁剪和保存图像
- mongodb - 带有键值对搜索的 MongoDB 标签
- unix - Jenkins、Ubuntu 节点和从属构建未能将项目保存到临时文件夹
- jetty - 有没有办法通过浏览器访问码头服务器日志?
- vue.js - 开发时是否可以在 Vue 中跟踪源样式定义(sass、scss)?