繁体   English   中英

为什么代码1比代码2快?

[英]Why is Code 1 faster than Code 2?

代码1:

n = int(input())
ls = []
for x in range(n):
    ls += [(input())]
ls.sort(key = int)
for x in ls:
    print (x)

代码2:

n = int(input())
ls = []
for x in range(n):
    ls += [int(input())]
ls.sort()
for x in ls:
    print (x)

这些是我对HackerRank的“大分类”问题的解决方案: https ://www.hackerrank.com/challenges/big-sorting

代码1没有给出超过时间限制的错误,而代码2却给出了错误。

为什么代码1比代码2更快?

代码比较慢,因为您现在需要将整数列表转换回字符串,而版本2保留字符串版本,仅转换为整数以进行排序。

将整数转换回字符串也需要时间:

>>> import timeit
>>> timeit.timeit("str(235739630407432043190819704398)", number=10**7)
2.4063552810002875

我强烈怀疑某些测试中包含的要排序的值既众多又非常大。

我也不会使用就地扩展 改用列表理解:

ls = [input() for x in range(n)]

就个人而言,我将使用sys.stdin上的迭代来读取速度比input()调用要快; 在这里, 所有循环都委托给优化的C代码:

import sys
from itertools import islice

n = int(next(sys.stdin))
nums = sorted(map(str.strip, islice(sys.stdin, n)), key=int)
print(*nums, sep='\n')

(因为从stdin读取的最后一行没有换行符,所以您不能指望所有行上都存在换行符,这样剥离起来会更容易,更快捷)。

str.strip替换为int会再次导致超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM