
PAT Basic 1028 https://www.patest.cn/contests/pat-b-practise/1028 思路很简单,但用 py3 老是在最后一个测试点超时,在网上找的 py2 答案却没这个问题。 PAT 提供 3.4.2 和 2.7.9 。抄来的代码如下。把 raw_input 和 print 改了也没用...
from sys import exit def isValid( birth ): if birth <= "2014/09/06" and birth >= "1814/09/06": return 0 else: return 1 str = raw_input() num = int(str) max = [] min = [] validNum = 0 for i in range(num): tmp = raw_input().split() if isValid( tmp[1] ) == 0: validNum += 1 if len(max) == 0 or max[1] > tmp[1]: max = tmp if len(min) == 0 or min[1] < tmp[1]: min = tmp if len(max) != 0: print validNum, max[0], min[0] else: print '0' exit(0) 1 wingyiu 2017-03-08 00:08:30 +08:00 py3 就是比 py2 慢,至少 3.6 之前是 |
2 NoAnyLove 2017-03-08 04:20:29 +08:00 我一直以为 Python 3 比 Python 2 快来着。。。。。。。 Orz 具体还是应该看代码吧,比如 Python 3 中大量使用了生成器,`xrange`取消了,`range`的效果等同于 Python 2 中的`xrange`,但是 Python 3 的`range`要比 Python 2 的`xrange`慢不少,看这里: ``` $ python3 -m timeit -s"r = range(33550336)" "for i in r: pass" 10 loops, best of 3: 835 msec per loop $ python2 -m timeit -s"r = xrange(33550336)" "for i in r: pass" 10 loops, bestof 3: 464 msec per loop ``` 代码来自: https://mail.python.org/pipermail/python-list/2011-August/609571.html 还有很多 filter 、 map 之类的函数都变成了返回生成器一样的对象。 但是。。。。。为啥 Python 3 比 Python 2 慢啊?这不科学啊。。。。 |
4 uxstone 2017-03-08 09:46:51 +08:00 都 python 了,没必要比这点快慢了吧...... 开发快才是真的快 |
5 charadeyouare OP @uxstone 刷题也快,能用 py 过就肯定用 py 。 |
6 XYxe 2017-03-08 16:28:24 +08:00 应该和 dict 的效率有很大的关系吧 |
7 charadeyouare OP @XYxe 没用到 dict 啊。但 dict 基于 hashmap , get 的效率不低吧? |
8 XYxe 2017-03-08 19:11:42 +08:00 @charadeyouare Python 内部用到 dict 的地方很多啊,比如说在交互模式下,`a=1`一共会创建并销毁 15 个字典对象。我这里测试 2.7 和 3.5 dict 的效率差很多啊。 |
9 charadeyouare OP @XYxe 这就尴尬了, 3.6 会比 2.7 快吗? |
10 NoAnyLove 2017-03-09 01:06:09 +08:00 @uxstone 刷题有影响。有些时候一个相同的算法,用 C/C++/Java 都能过, Python 却会 TLE , Orz |