Python 的性能问题

软件和网站开发以及相关技术探讨
回复
头像
Hello World!
帖子: 3051
注册时间: 2008-06-23 15:19
系统: ���������
来自: 北欧某国
联系:

Python 的性能问题

#1

帖子 Hello World! » 2013-04-23 0:46

最近在琢磨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 网站改版中。
头像
ciahly
帖子: 14
注册时间: 2012-02-22 10:13

Re: Python 的性能问题

#2

帖子 ciahly » 2013-04-26 12:16

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]
据说列表推导式会比循环快。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: Python 的性能问题

#3

帖子 lilydjwg » 2013-06-16 21:34

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]
据说列表推导式会比循环快。
但是你这样就没有短路的效果了。
Kabie
帖子: 26
注册时间: 2008-12-16 14:31

Re: Python 的性能问题

#4

帖子 Kabie » 2013-07-25 22:13

代码: 全选

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)))
回复