提问:两种python写法的执行效率会相差很大吗?

2013-04-24 00:20:43 +08:00
 talentsnail
1.

[ x for x in some_list if x % 2 == 0 ]

2.
list=[]
for x in some_list:
if x%2==O:
list.append(x)

这两种写法的执行效率相差会很明显嘛?
3332 次点击
所在节点    Python
8 条回复
swulling
2013-04-24 00:31:35 +08:00
没有,两个都是iterator

前者更好用,我喜欢
adieu
2013-04-24 00:54:20 +08:00
应该是第一个写法效率高,参见 https://gist.github.com/anonymous/5445383

第二个写法会用到function call,对效率影响比较大

话说其实测一下应该很容易比较出来
mengzhuo
2013-04-24 01:12:30 +08:00
第一种是Python的C实现,数据量小的话比第二种快70倍左右
而且==0 可以不写了
[ x for x in some_list if x % 2]
leiz
2013-04-24 01:43:19 +08:00
@mengzhuo 有==0是判定双数,没有是是判定单数
talentsnail
2013-04-24 08:43:57 +08:00
@swulling
@adieu
@mengzhuo
@leiz 谢谢大家啦:)
yangxin0
2013-04-24 10:00:10 +08:00
第一条是以C语言执行,第二条是解释执行。
mengzhuo
2013-04-24 11:00:34 +08:00
@leiz 谢谢指正,我太粗心了

LZ也要小心
0%2 #0 -> False
1%2 #1 -> True

那就应该改成
[ x for x in some_list if not x % 2]
不过这样不如
[ x for x in some_list if x%2 == 0]
看得清
guotie
2013-04-24 11:54:55 +08:00
实测如下:
len(list) f1 f2
100000 0.006 0.009
1000000 0.07 0.103
10000000 0.727 1.052

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/66775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX