【发布时间】:2015-10-11 07:46:45
【问题描述】:
我想检查字符串比较是如何工作的(我想看看它是否是逐个字符的,以及是否在比较之前检查字符串的长度),所以我使用了以下代码:
s1 = 'abc'
s2 = 'abcd'
s3 = 'dbc'
s4 = 'abd'
t1 = time.clock()
s1==s2
print time.clock() - t1
t2 = time.clock()
s1==s3
print time.clock() - t2
t3 = time.clock()
s1==s4
print time.clock() - t3
当我在非常长的字符串(约 30MB 文本文件)上尝试相同的操作时,它效果很好,我发现它确实执行了长度检查,并且它还逐个字符地比较了字符。 但是当我在短字符串(例如上面代码中的字符串)上尝试过它时,性能结果非常不一致。 任何人都知道为什么他们不一致或我做错了什么? (也许我错了,比较不像我想的那样工作?)
编辑:我也尝试过的一个例子是将不同长度的字符串与特定字符串进行比较。我认为执行时间最长的字符串将是与另一个字符串具有确切长度的字符串,因为其余字符串将落在长度检查中,但它也不一致)。 假设我正在检查的字符串是 'hello',所以我比较了 'a'、'aa'、'aaa' 等等...... 我期待看到最长的检查将是“aaaaa”,但它是“a”,我不知道为什么。
【问题讨论】:
-
“结果非常不一致” - 以什么方式?你期待什么输出,你看到了什么?
-
@TigerhawkT3 我刚刚编辑了帖子以使其更清晰。
-
time.clock不是对 Python 代码速度进行基准测试的好选择,尤其是在现代多任务操作系统中,在脚本执行时,可能有几十个其他进程可能会占用 CPU 几分之一秒时断时续。timeit会更好,因为它可以平均高负载周期,但仍然存在一些固有的不精确性。 -
90% 的帖子听起来像是平等测试本身产生的结果不一致。我建议对其进行编辑,以明确您所谈论的是性能。也就是说,仅测试几个字符的单个比较必然会产生不一致的性能结果。这就是大多数测试运行多次的原因。
-
假设您正在使用该语言的 CPython 实现,您可以了解如何执行字符串比较here(在 C 中)。
标签: python string time char compare