В Python, как Вы находите количество цифр в целом числе?
Если вам нужна длина целого числа, равная количеству цифр целого числа, вы всегда можете преобразовать его в строку, например str (133)
, и найти ее длину, например len (str (123))
.
Вы можете сравнить вашу коллекцию с упорядоченной версией:
CollectionAssert.AreEqual(foos.ToList(), foos.OrderBy(f => f.Id));
Или:
CollectionAssert.AreEqual(foos.ToList(),
foos.OrderByDescending(f => f.DateCreated));
-121--4950603- Без преобразования в строку
import math
digits = int(math.log10(n))+1
Для обработки нулевых и отрицательных чисел
import math
if n > 0:
digits = int(math.log10(n))+1
elif n == 0:
digits = 1
else:
digits = int(math.log10(-n))+2 # +1 if you don't count the '-'
Вы, вероятно, захотите поместить это в функцию:)
Вот некоторые тесты. len (str ())
уже позади даже для довольно небольших чисел
timeit math.log10(2**8)
1000000 loops, best of 3: 746 ns per loop
timeit len(str(2**8))
1000000 loops, best of 3: 1.1 µs per loop
timeit math.log10(2**100)
1000000 loops, best of 3: 775 ns per loop
timeit len(str(2**100))
100000 loops, best of 3: 3.2 µs per loop
timeit math.log10(2**10000)
1000000 loops, best of 3: 844 ns per loop
timeit len(str(2**10000))
100 loops, best of 3: 10.3 ms per loop
-121--627364- Python 2. *
int
s принимают либо 4, либо 8 байт (32 или 64 бит), в зависимости от вашей сборки Python. sys.maxint
( 2 * * 31-1
для 32-разрядных int, 2 * * 63-1
для 64-разрядных int) сообщит, какую из двух возможностей можно получить.
В Python 3 int
s (как long
s в Python 2) могут принимать произвольные размеры вплоть до объема доступной памяти; sys.getsizeof
дает вам хорошую индикацию для любого заданного значения, хотя также подсчитывает некоторые фиксированные издержки:
>>> import sys
>>> sys.getsizeof(0)
12
>>> sys.getsizeof(2**99)
28
Если, как показывают другие ответы, вы думаете о некотором строковом представлении целого значения, то просто возьмите len
этого представления, будь то в базовой 10 или иначе!
Предполагая, что вы запрашиваете наибольшее число, которое вы можете сохранить в виде целого числа, значение зависит от реализации. Я предлагаю вам не думать таким образом при использовании python. В любом случае довольно большое значение может быть сохранено в "целочисленном" Python. Помните, Python использует утиную печать!
Изменить: Я дал свой ответ до пояснения, что спрашивающий хотел количество цифр. Для этого я согласен с методом, предложенным в принятом ответе. Больше нечего добавить!
Без преобразования в строку
import math
digits = int(math.log10(n))+1
Чтобы также обрабатывать нулевые и отрицательные числа
import math
if n > 0:
digits = int(math.log10(n))+1
elif n == 0:
digits = 1
else:
digits = int(math.log10(-n))+2 # +1 if you don't count the '-'
Вам, наверное, захочется поместить это в функцию :)
Вот несколько бенчмарков. len(str())
уже отстает даже для совсем маленьких чисел
timeit math.log10(2**8)
1000000 loops, best of 3: 746 ns per loop
timeit len(str(2**8))
1000000 loops, best of 3: 1.1 µs per loop
timeit math.log10(2**100)
1000000 loops, best of 3: 775 ns per loop
timeit len(str(2**100))
100000 loops, best of 3: 3.2 µs per loop
timeit math.log10(2**10000)
1000000 loops, best of 3: 844 ns per loop
timeit len(str(2**10000))
100 loops, best of 3: 10.3 ms per loop
from math import log10
digits = lambda n: ((n==0) and 1) or int(log10(abs(n)))+1