在比较任何变量时,都有比较等式和比较不平等的选择。对于具有一个元素的变量,而不是字符串/list/tuple/etc.,差异可能不存在或可以忽略不计。
的问题是:当比较两个多元素变量时,是检查它们是否相等、慢还是快,而不是比较它们是否不相等。
我的直觉告诉我,比较它们是否不相等应该更快。我很好奇是否有人能告诉我这是否是真的,对于哪种类型的多元素类型是这样的。
Note__:我看过了,也没有发现任何能回答我问题的帖子。这可能是显而易见的,但我想有更多的意见,而不仅仅是我自己。
发布于 2014-06-12 20:58:14
你可以随时检查一下:
>>> timeit("{'a': 1, 'b': 2} == {'a': 2, 'b': 1}")
0.29072967777517983
>>> timeit("{'a': 1, 'b': 2} != {'a': 2, 'b': 1}")
0.2906114293159803差别似乎可以忽略不计。另一个测试用例?
>>> timeit("range(30) == range(35)")
0.7179841181163837
>>> timeit("range(30) != range(35)")
0.725536848004765再说一次可以忽略不计。
>>> timeit("a == b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06806470555693522
>>> timeit("a != b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06724365965146717随着对象的创建被移出。诚然,很小的例子,但我仍然认为两者都在适当的地方使用短路,当它们变得明显不同时。
发布于 2014-06-12 20:59:12
我认为它与object.__eq__()和object.__ne__直接相关。
当使用== (相等)或!=(非相等)时启动此方法,在要比较的对象的函数中,它可能更快,也可能更慢,这取决于方法是如何编写的。
请参阅官方文档中的Datamodel基本定制。
发布于 2014-06-12 21:11:25
我对某些Cortex M3程序集的经验(或者至少我的教授说它就是这样)是,当您检查相等或不相等时,有一个比较命令可以设置3位,还有一个if语句(如果您可以称之为它),它会查看一个特定的命令。本质上比较A和B,3位是小的、相等的和大的,那么当您检查任何东西时,它应该检查它是大的还是小的(2次检查,所以2次循环),或者对相等的标志应用NOT,这取决于体系结构可能是两个不同的动作,或者是一个周期。因此,我推测它取决于编译器、汇编程序和CPU的体系结构。
然而,这应该意味着您可以制作两个程序,每个程序都进行大量这样的检查,并执行它们的时间,其中巨大的程序将运行到数以万计(从C/C++中的执行时间判断)。在我看来,这是一项相当可行的任务,它可以手工计时,这样你就不会弄乱计时器,而且定时器在许多语言中对于它们的精确性有一些特性,它们甚至可能无法捕捉单个语句的执行时间。或者你可以给巨大的循环计时,看看电脑怎么说。
但是,请记住,如果在不相等的循环中得到1.1倍的时间,这并不意味着不等式需要1.1倍的等式检查时间,因为循环的周期要大得多,它可能是时间的2倍。有了更多的测试,每个循环都有更多的检查,那么确定循环所需的时间和用于检查的时间应该是非常容易的。希望这能有所帮助。
https://stackoverflow.com/questions/24193690
复制相似问题