how to convert code that uses cmp to python3
Chris Angelico
rosuav at gmail.com
Fri Apr 8 10:30:13 EDT 2016
On Sat, Apr 9, 2016 at 12:22 AM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
>> seq1 == seq2
>> seq1 < seq2
>>
>> You only need ONE comparison, and the other is presumed to be its
>> opposite. When, in the Python 3 version, would you need to compare
>> twice?
>
> When there are three possible code paths depending on the result.
>
> def search(key, node):
> if node is None:
> raise KeyError(key)
> if key < node.key:
> return search(key, node.left)
> elif key == node.key:
> return node
> else:
> return search(key, node.right)
>
> How would you implement this with only one comparison?
I was assuming that the equality check could be a lot cheaper than the
inequality, which is often the case when it is false (it's pretty easy
to prove that two enormous objects are different - any point of
difference proves it). Doing the equality check first generally means
you're paying the price of one expensive lookup each time.
If proving that x != y is expensive too, then call it two comparisons
rather than three. But you still don't need to check both directions
of inequality.
ChrisA
More information about the Python-list
mailing list