当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : Python 的性能问题
帖子发表于 : 2013-04-23 0:46 
头像

注册: 2008-06-23 15:19
帖子: 3051
地址: 北欧某国
系统: ���������
送出感谢: 21
接收感谢: 6
最近在琢磨A*算法。

程序中经常要执行
[python]for i in self.close:
if node.x == i.x and node.y == i.y:
return True
return False[/python]和[python]for i, n in enumerate(self.open):
if node.x == n.x and node.y == n.y:
return i
return -1[/python]这两段。请问,能不能使用 “in” 来代替程序中的循环呢?谢谢。


_________________
http://noie.name 网站改版中。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: Python 的性能问题
帖子发表于 : 2013-04-26 12:16 
头像

注册: 2012-02-22 10:13
帖子: 14
送出感谢: 1
接收感谢: 0 次
in是什么意思?我只知道用列表推导式。

第一个:
代码:
 if [True for i in self.close if node.x == i.x and node.y == i.y] :
...

如果一个True也没有,就是空列表,对if来说就是False.

第二个:
代码:
[i for i,n in enumerate(self.open) if node.x == i.x and node.y == i.y]

据说列表推导式会比循环快。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: Python 的性能问题
帖子发表于 : 2013-06-16 21:34 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
ciahly 写道:
in是什么意思?我只知道用列表推导式。

第一个:
代码:
 if [True for i in self.close if node.x == i.x and node.y == i.y] :
...

如果一个True也没有,就是空列表,对if来说就是False.

第二个:
代码:
[i for i,n in enumerate(self.open) if node.x == i.x and node.y == i.y]

据说列表推导式会比循环快。


但是你这样就没有短路的效果了。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: Python 的性能问题
帖子发表于 : 2013-07-25 22:13 

注册: 2008-12-16 14:31
帖子: 26
送出感谢: 0 次
接收感谢: 0 次
代码:
any(node.x, node.y == i.x, i.y for i in self.close)


代码:
next(itertools.dropwhile(lambda i,n:(node.x, node.y != n.x, n.y), enumerate(self.open)))


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译