python - 为什么字符串比较不比 Python 中的整数比较快?
问题描述
C++ 中的差异是巨大的,但在 Python 中则不然。我在 C++ 上使用了类似的代码,结果却大不相同——整数比较比字符串比较快 20-30 倍。
这是我的示例代码:
import random, time
rand_nums = []
rand_strs = []
total_num = 1000000
for i in range(total_num):
randint = random.randint(0,total_num*10)
randstr = str(randint)
rand_nums.append(randint)
rand_strs.append(randstr)
start = time.time()
for i in range(total_num-1):
b = rand_nums[i+1]>rand_nums[i]
end = time.time()
print("integer compare:",end-start) # 0.14269232749938965 seconds
start = time.time()
for i in range(total_num-1):
b = rand_strs[i+1]>rand_strs[i]
end = time.time() # 0.15730643272399902 seconds
print("string compare:",end-start)
解决方案
我无法解释为什么它在 C++ 中这么慢,但在 Python 中,原因很简单,从您的测试代码来看:随机字符串通常在第一个字节中不同,因此这些情况的比较时间应该几乎相同。
此外,循环控制和列表访问中不会有太多开销。zip
如果您通过ping 列表删除这些因素,您将获得更准确的衡量标准:
for s1, s2 in zip(rand_strs, rand_strs[1:]):
b = s1 > s2
推荐阅读
- azure-logic-apps - ADLS 的 Azure 逻辑应用 http 连接器损坏了 zip 文件
- windows - 如何从第一行输出中仅获取 postgres.exe 的 PID
- javascript - 为什么 for 循环函数返回 else-code 而不是输入 if-true-code?
- html - 如何使用 Blazor 组件定位特定的 div?
- android - 使用改造 android 的搜索视图
- ibm-midrange - 在 IBM i 的 iASP 上运行程序时通过 IFS 引用库
- javascript - 有人开始流式传输时的自动角色
- c++ - 了解复制构造函数的工作
- javascript - Angular:使用 *ngIf 隐藏组件不起作用
- excel - 从 S3 下载时 Excel 文件损坏