python怎么实现deepcopy_deepcopy和python-避免使用的提示?
我有一个非常简单的python例程,其中涉及循环遍历大约20,000个纬度,经度坐标的列表,并计算每个点到参考点的距离。
def compute_nearest_points( lat, lon, nPoints=5 ):
"""Find the nearest N points, given the input coordinates."""
points = session.query(PointIndex).all()
oldNearest = []
newNearest = []
for n in xrange(nPoints):
oldNearest.append(PointDistance(None,None,None,99999.0,99999.0))
newNearest.append(obj2)
#This is almost certainly an inappropriate use of deepcopy
# but how SHOULD I be doing this?!?!
for point in points:
distance = compute_spherical_law_of_cosines( lat, lon, point.avg_lat, point.avg_lon )
k = 0
for p in oldNearest:
if distance < p.distance:
newNearest[k] = PointDistance(
point.point, point.kana, point.english, point.avg_lat, point.avg_lon, distance=distance
)
break
else:
newNearest[k] = deepcopy(oldNearest[k])
k += 1
for j in range(k,nPoints-1):
newNearest[j+1] = deepcopy(oldNearest[j])
oldNearest = deepcopy(newNearest)
#We're done, now print the result
for point in oldNearest:
print point.station, point.english, point.distance
return
我最初使用完全相同的方法在C中编写了此代码,并且在那儿工作得很好,并且对于nPoints <=
100基本上是瞬时的。所以我决定将其移植到python,因为我想使用SqlAlchemy来做其他事情。
我首先移植了它,但没有现在可以使用该方法的deepcopy语句,这导致结果“奇数”或部分不正确,因为某些要点只是被复制为引用(我猜?我想吗?)-但是它仍然几乎与C版本一样快。
现在添加了deepcopy调用后,该例程可以正确执行其工作,但是却造成了极大的性能损失,并且现在需要几秒钟来完成相同的工作。
这似乎是一项很普通的工作,但是我显然不是以pythonic的方式来做。我应该如何做才能使我仍然获得正确的结果,而不必到处都包含Deepcopy?
编辑:
我已经找到了一个更简单,更快速的解决方案,
def compute_nearest_points2( lat, lon, nPoints=5 ):
"""Find the nearest N points, given the input coordinates."""
points = session.query(PointIndex).all()
nearest = []
for point in points:
distance = compute_spherical_law_of_cosines( lat, lon, point.avg_lat, point.avg_lon )
nearest.append(
PointDistance(
point.point, point.kana, point.english, point.avg_lat, point.avg_lon, distance=distance
)
)
nearest_points = sorted(nearest, key=lambda point: point.distance)[:nPoints]
for item in nearest_points:
print item.point, item.english, item.distance
return
因此,基本上,我只是复制输入内容并附加一个新值-
距参考点的距离。然后,我仅将“已排序”应用于结果列表,并指定排序键应为PointDistance对象的distance属性。
尽管我承认我不太了解为什么,但这比使用Deepcopy快得多。我想这取决于有效的C实现python的“排序”吗?
python怎么实现deepcopy_deepcopy和python-避免使用的提示?相关推荐
- 面试前赶紧看了5道Python Web面试题,Python面试题No17
目录 本面试题题库,由公号:非本科程序员 整理发布 第1题: Flask中的请求上下文和应用上下文是什么? 第2题:django中间件的使用? 第3题: django开发中数据做过什么优化? 第4题: ...
- python queue 调试_学Python不是盲目的,是有做过功课认真去了解的
有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...
- linux python版本_linux下更新Python版本并修改默认版本
linux下更新Python版本并修改默认版本,有需要的朋友可以参考下. 很多情况下拿到的服务器python版本很低,需要自己动手更改默认python版本 1.从官网下载python安装包(这个版本可 ...
- Python培训教程分享:Python异常机制
在学习Python技术的时候,我们经常会遇到一些异常,例如导致程序在运行过程中出现的中断或退出,我们都称之为异常,大多数的异常都不会被程序处理,而是以错误信息的形式展现出来.本期Python培训教 ...
- Python培训教程分享:Python中选择结构是什么
越来越多的人开始报名学习Python技术,那么学习Python技术不是一两天就能学会的,本期小编为大家推荐的Python培训教程主要讲的是"Python中选择结构是什么",下面来看 ...
- Python培训教程分享:Python模块如何导入__all__属性?
本期小编为大家带来的Python培训教程是关于"Python模块如何导入__all__属性?"的内容,后面在工作中是会遇到Python模块这个工作内容的,Python模块的开头通常 ...
- 【python教程入门学习】Python零基础入门爬虫项目
Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...
- Python学习全家桶,Python初学者十一个热门问题
一.学习Python要用什么系统? Python是跨平台的,什么系统都可以 二.学习Python用什么编辑器? 这里小编推荐pycharm PyCharm带有一整套可以帮助用户在使用Python语言开 ...
- python语言中的多行注释符是_有没有一种方法可以在Python中创建多行注释? - python...
我最近开始研究Python,但是找不到如何实现多行注释.大多数语言都有块注释符号,例如 /* */ 我在Python中尝试过此方法,但它引发了错误,因此这可能不是正确的方法. Python实际上是否具 ...
- Python | 用PrettyPrinter,让Python输出更漂亮,你值得拥有
PrettyPrinter是Python 3.6 及以上版本中的一个功能强大.支持语法高亮.描述性的美化打印包.它使用了改进的Wadler-Leijen布局算法,和Haskell打印美化库中的pret ...
最新文章
- 数据扩展性探讨和总结--转
- C/C++人机猜拳游戏
- 使用Java中的Try-With-Resource
- [html] 说说html5手势检测原理是什么?
- 关于类成员函数中访问同类对象的私有成员
- 京东:2022年将在全国范围内招聘超两万名高校毕业生
- MySQL事务操作原理与用法详解
- [redis] redis连接远程客户端查询数据
- Java面向对象总复习-QuickHit
- EXTJS学习系列提高篇:第八篇(转载)作者殷良胜,制作树形菜单之二
- 如何修改电脑的MAC地址(手把手更改)
- Learning Git Branching
- 郑州财经学院第54次全国计算机,郑州财经学院第二期教师博士班开班
- html 布局 flex,CSS flex布局
- 纯原生javascript下拉框表单美化实例教程
- A5M2数据库工具下载
- Esxi6.7-7.0设置自动启动无效原因
- 玩转EXCEL系列透视表实现按月份汇总数据
- 关于开展我市2012年度专业技术资格评审工作的通知
- python中day_python(day03)
热门文章
- java BorderLatout_浅谈java的BorderLayout的使用
- 【转】CSS3学习笔记 之 动态伪类选择器
- linux快速安装mysql教程
- iftop网卡流量监控软件
- Core Animation基础 1
- mokoid android open source HAL hacking in a picture
- java中将json转换成map
- 创新团队中常见的几种“怪人”
- The requested resource is not available. 原因,成功解决
- y空间兑换代码_如何让Python代码加速运行?