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

Python 为什么代码1比代码2快?,python,performance,Python,Performance,代码1: 代码2: 这些是我对黑客银行大排序问题的解决方案: 代码1未给出超出时间限制的错误,而代码2则给出 为什么代码1比代码2快?代码较慢,因为现在需要将整数列表转换回字符串,而版本2保留字符串版本,仅转换为整数进行排序 将整数转换回字符串也需要时间: >>> import timeit >>> timeit.timeit("str(235739630407432043190819704398)", number=10**7) 2.40635528100

代码1:

代码2:

这些是我对黑客银行大排序问题的解决方案:

代码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上的迭代来读取比输入调用更快的数据;此处,所有循环都委托给优化的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将再次导致超时

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

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

>>> import timeit
>>> timeit.timeit("str(235739630407432043190819704398)", number=10**7)
2.4063552810002875
我强烈怀疑某些测试中包含的排序值既多又非常大

我也不会使用就地扩展。改为使用列表:

ls = [input() for x in range(n)]
就个人而言,我会使用sys.stdin上的迭代来读取比输入调用更快的数据;此处,所有循环都委托给优化的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将再次导致超时

通过使用append而不是+=,可以大大提高代码的效率。也就是说,这看起来是一个有趣的问题。通过使用append而不是+=,可以大大提高代码的效率。尽管如此,这看起来是一个有趣的问题。