Best search algorithm to find condition within a range

Ian Kelly ian.g.kelly at gmail.com
Tue Apr 7 21:28:29 CEST 2015


On Tue, Apr 7, 2015 at 1:19 PM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
> On Tue, Apr 7, 2015 at 12:55 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>> On 4/7/2015 1:44 PM, Ian Kelly wrote:
>>
>>>>>> def to_base(number, base):
>>>
>>> ...     digits = []
>>> ...     while number > 0:
>>> ...         digits.append(number % base)
>>> ...         number //= base
>>> ...     return digits or [0]
>>> ...
>>>>>>
>>>>>>
>>>>>> to_base(2932903594368438384328325832983294832483258958495845849584958458435439543858588435856958650865490,
>>>>>> 429496729)
>>>
>>> [27626525, 286159541, 134919277, 305018215, 329341598, 48181777,
>>> 79384857, 112868646, 221068759, 70871527, 416507001, 31]
>>> About 15 microseconds.
>>
>>
>> % and probably // call divmod internally and toss one of the results.
>> Slightly faster (5.7 versus 6.1 microseconds on my machine) is
>
> Not on my box.
>
> $ python3 -m timeit -s "n = 1000000; x = 42" "n % x; n // x"
> 10000000 loops, best of 3: 0.105 usec per loop
> $ python3 -m timeit -s "n = 1000000; x = 42" "divmod(n,x)"
> 10000000 loops, best of 3: 0.124 usec per loop

But curiously, if I time the whole function, then my results mirror
yours; I wonder why that is. I don't see anything obvious in the
disassembly that would explain it.



More information about the Python-list mailing list