Почему является большим целочисленным разделением быстрее, чем нарезки (числовые) строки, для доступа к индивидуальным цифрам?

Я делаю ( Типичное) назначение нахождения простых числа. Я думал, что я умным и, для больших чисел, пропустите процесс разделения с этим трюком:

def div5(candidate):
    return str(candidate)[-1] == "5"

Добавление 5 к себе несколько тысяч раз кажется отходом (мне нужен только последний член ), но я хотел быть уверен.

Кредит в ЮНУТБУ на Время измерения, прошедшего в Python?

%>python -mtimeit -s"import intDiv" "intDiv.div5(2147483645)"
1000000 loops, best of 3: 0.272 usec per loop

%>python -mtimeit -s"import strDiv" "strDiv.str5(2147483645)"
1000000 loops, best of 3: 0.582 usec per loop

Для разъяснения, вот два метода, которые я определил.

def div5(maxi): return not (maxi%5)

def str5(maxi): return str(maxi)[-1] == '5'

Это слишком медленно. Как я могу Проанализируйте последний член STR (MAXI), без преобразования всего числа (без необходимости)?

благодаря @ Claudiu для помощи с уборкой глаз.

-

5
задан Community 23 May 2017 в 11:55
поделиться