как узнать длину числа в python
Длина целого числа в Python
В Python, как найти число цифр в целом числе?
16 ответов
Python 2.* int занимает 4 или 8 байтов (32 или 64 бита), в зависимости от вашей сборки Python. sys.maxint ( 2**31-1 для 32-битных целых, 2**63-1 для 64-битных целых) скажут вам, какую из двух возможностей можно получить.
В Python 3 int s (как long s в Python 2) могут принимать произвольные размеры вплоть до объема доступной памяти; sys.getsizeof дает хорошее представление для любого заданного значения, хотя действительно также учитывает некоторые фиксированные накладные расходы:
Если, как показывают другие ответы, вы думаете о каком-то строковом представлении целочисленного значения, просто возьмите len этого представления, будь то в базе 10 или иначе!
Отформатируйте в научной записи и вычеркните экспоненту:
Я не знаю о скорости, но это просто.
Обратите внимание на количество значащих цифр после десятичной дроби («5» в «.5e» может быть проблемой, если округлить десятичную часть научной нотации до другой цифры. Я установил ее произвольно большим, но мог бы отразить длина наибольшего числа, о котором вы знаете.
Прошло несколько лет с тех пор, как был задан этот вопрос, но я собрал эталонный тест нескольких методов для вычисления длины целого числа.
(функция libc требует настройки, которую я не включил)
size_exp спасибо Брайану Преслопски, size_str спасибо GeekTantra, а size_math спасибо Джону Ла Руи
(Отказ от ответственности: функция запускается на входах от 1 до 1 000 000)
Спасибо @SetiVolkylany за внимание к этому ограничению. Удивительно, как казалось бы правильные решения имеют недостатки в деталях реализации.
Предполагая, что вы запрашиваете наибольшее число, которое вы можете сохранить в целом числе, значение зависит от реализации. Я полагаю, что вы не думаете так при использовании Python. В любом случае, довольно большое значение может быть сохранено в «целое число» Python. Помните, Python использует утку печатать!
Edit: Я дал свой ответ перед разъяснением, что спрашивающий хотел количество цифр. Для этого я согласен с методом, предложенным принятым ответом. Больше нечего добавить!
Без сомнения, для потомков самое медленное решение этой проблемы:
Ну, без преобразования в строку я бы сделал что-то вроде:
Минималистская рекурсия FTW
Это можно быстро сделать для целых чисел, используя:
Который получает длину строки абсолютного значения «1234567890»
abs возвращает число БЕЗ любых отрицательных значений (только величина числа), str преобразует / преобразует его в строку, а len возвращает длину строки этой строки.
Если вы хотите, чтобы он работал для поплавков, вы можете использовать одно из следующих:
Для дальнейшего использования.
Все решения math.log10 доставят вам проблемы.
Решение состоит в том, чтобы использовать метод счетчика while для чисел выше этого порога.
Чтобы сделать это еще быстрее, создайте 10 ^ 16, 10 ^ 17 и так далее и сохраните в виде переменных в списке. Таким образом, это похоже на поиск по таблице.
Как уже упоминалось, дорогой пользователь @Calvintwr, функция math.log10 имеет проблему с числом вне диапазона [-999999999999997, 999999999999997], где мы получаем ошибки с плавающей запятой. У меня была эта проблема с JavaScript (Google V8 и NodeJS) и C (компилятор GNU GCC), поэтому решение ‘purely mathematically’ здесь невозможно.
На основе этой gist и ответ уважаемый пользователь @Calvintwr
Я проверил это на номерах с длиной до 20 (включительно) и все в порядке. Этого должно быть достаточно, поскольку длина целочисленного числа в 64-битной системе равна 19 ( len(str(sys.maxsize)) == 19 ).
Все примеры кодов, протестированных на Python 3.5
Длина целого числа в Python
в Python, как вы находите количество цифр в целое число?
15 ответов:
также обрабатывать нулевые и отрицательные числа
вы, вероятно, хотите поместить это в функцию 🙂
вот некоторые ориентиры. Элемент len(str()) уже позади даже для совсем небольших чисел
вся математика.log10 решения дадут вам проблемы.
решение заключается в использовании метода счетчика while для чисел выше этого порога.
чтобы сделать это еще быстрее, создайте 10^16, 10^17 и так далее и сохраните как переменные в списке. Таким образом, это похоже на стол уважать.
Python 2.* int S занимает 4 или 8 байт (32 или 64 бита), в зависимости от вашей сборки Python. sys.maxint ( 2**31-1 для 32-битных ints, 2**63-1 для 64-битных ints) расскажет вам, какая из двух возможностей получает.
В Python 3, int s (например long s в Python 2) может принимать произвольные размеры до объема доступной памяти; sys.getsizeof дает вам хорошую индикацию для любого данного значения, хотя это тут также подсчитайте некоторые фиксированные накладные расходы:
если, как и другие ответы, вы думаете о некотором строковом представлении целочисленного значения, то просто возьмите len этого представления, будь то в базе 10 или иначе!
пусть будет n тогда количество цифр в n дано:
спасибо @SetiVolkylany за привлечение моего внимания к этому ограничению. Свой удивительно, как, казалось бы, правильные решения имеют оговорки в деталях реализации.
Ну, без преобразования в строку я бы сделал что-то вроде:
минималистская рекурсия FTW
как уже упоминалось Уважаемый пользователь @Calvintwr, функция math.log10 имеет проблему в числе за пределами диапазона [-999999999999997, 999999999999997], где мы получаем ошибки с плавающей запятой. У меня была эта проблема с JavaScript (Google V8 и NodeJS) и C (компилятор GNU GCC), поэтому a ‘purely mathematically’ решение здесь невозможно.
на основе этого суть и ответ Уважаемый пользователь @Calvintwr
я проверял это на номера длиной до 20 (включительно) и все в порядке. Этого должно быть достаточно, так как длина max integer number в 64-битной системе равна 19 ( len(str(sys.maxsize)) == 19 ).
все примеры кодов, протестированных с Python 3.5
для потомков, без сомнения, самое медленное решение этой проблемы:
Длина целого числа в Python
в Python, как вы находите количество цифр в целом числе?
15 ответов
без преобразования в строку
также обрабатывать нулевые и отрицательные числа
вы, вероятно, захотите поместить это в функцию:)
вот некоторые ориентиры. The len(str()) уже отстает даже для совсем небольших чисел
вся математика.решения log10 дадут вам проблемы.
решение состоит в том, чтобы использовать метод счетчика while для чисел выше этого порога.
чтобы сделать это еще быстрее, создайте 10^16, 10^17 и так далее и сохраните как переменные в списке. Таким образом, это как стол уважать.
Python 2.* int s возьмите 4 или 8 байт (32 или 64 бита), в зависимости от вашей сборки Python. sys.maxint ( 2**31-1 для 32-битных ints, 2**63-1 для 64-битных ints) скажет вам, какая из двух возможностей получает.
В Python 3, int s (как long s в Python 2) может принимать произвольные размеры до объема доступной памяти; sys.getsizeof дает вам хорошее указание для любого заданного значения, хотя это тут также подсчитайте некоторые фиксированные накладные расходы:
если, как показывают другие ответы, вы думаете о некотором строковом представлении целочисленного значения, то просто возьмите len этого представления, будь то в базе 10 или иначе!
пусть будет n тогда количество цифр в n дано:
спасибо @SetiVolkylany за attenstion этого ограничения. Свой удивительно, как, казалось бы, правильные решения имеют оговорки в деталях реализации.
Ну, без преобразования в строку я бы сделал что-то вроде:
минималистская рекурсия FTW
как уже упоминалось Уважаемый пользователь @Calvintwr, функция math.log10 имеет проблему в числе вне диапазона [-999999999999997, 999999999999997], где мы получаем ошибки с плавающей запятой. У меня была эта проблема с JavaScript (Google V8 и NodeJS) и C (компилятор GNU GCC), поэтому ‘purely mathematically’ решение здесь невозможно.
основываясь на этом суть и ответ Уважаемый пользователь @Calvintwr
я проверял это по номерам длиной до 20 (включительно) и все в порядке. Этого должно быть достаточно, потому что максимальное целое число длины в 64-битной системе равно 19 ( len(str(sys.maxsize)) == 19 ).
все примеры кодов, протестированных с Python 3.5
Числа в Python (FAQ)
Ч исла в Python (как и в других языках программирования) чрезвычайно простое понятие. В Python все переменные представляют собой объекты и размещаются в динамической памяти.
Базовый набор Python содержит следующие типы чисел:
Целые числа (int)
В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа int
Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа int может быть записано число неограниченной длины. Единственное ограничение длины – это размер оперативной памяти.
>>> 134523345234252523523478777 ** 2 18096530413013891133013347014216107772438771969415729
Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:
Вещественные числа (float)
Числа типа float – неточны (из-за представления чисел с плавающей запятой в компьютере).
>>> 0.3 + 0.3 + 0.3 + 0.1 0.9999999999999999
Информацию о точности и внутреннем представлении float для вашей системы можно получить из sys.float_info
>>> import sys >>> sys.float_info sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
Если нужна высокая точность обычно используют модули Decimal и Fraction.
Комплексные числа (complex)
Отдельные части комплексного числа доступны через атрибуты real и imag
>>> num = 1.1+2j >>> num.real, num.imag (1.1, 2.0)
Операции с числами
Является ли переменная числом
Любую переменную можно проверить на тип (int, float или complex):
n = 10 >>> if type(n) == int: print(«This is int») This is int
Если вы хотите проверить, находится ли в строке число, воспользуйтесь методом isdigit()
>>> string = «404» >>> string.isdigit() True
Однако стоит помнить, что метод isdigit() не работает для отрицательных чисел и чисел с плавающей точкой.
Также для проверки на число, можно написать собственную функцию:
>>> def isInt(value): try: int(value) return True except ValueError: return False >>> isInt(123) True >>> isInt(«qwerty») False >>> isInt(«123») True >>> isInt(«-123») True >>> isInt(«123.2») False
Арифметические операции
Сравнение чисел
Преобразования
Ввод чисел
Если нужен список чисел, введите несколько чисел через пробел и выполните:
my_list = [int(x) for x in input().split()] print(my_list) # [1, 2, 3]
Вывод чисел
Для вывода числа используйте print()
На практике возникают ситуации, когда нужно вывести число вместе со строкой (например пояснить, что означает число). Существует несколько вариантов сделать это:
>>> print(«int variable = » + str(1)) int variable = 1 >>> print(«int variable = <>«.format(1)) int variable = 1 >>> print(f’int variable = <1>‘) # f-строки работаюв в Python 3.6+ int variable = 1
Как узнать длину числа в python
2. Срезы (slices)
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.
Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.
Или в виде таблицы:
Строка S | H | e | l | l | o |
Индекс | S[0] | S[1] | S[2] | S[3] | S[4] |
Индекс | S[-5] | S[-4] | S[-3] | S[-2] | S[-1] |
Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.
На самом деле в питоне нет и переменных. Есть лишь имена, которые связаны с какими-нибудь объектами. Можно сначала связать имя с одним объектом, а потом — с другим. Можно несколько имён связать с одним и тем же объектом.
3. Методы
3.1. Методы find и rfind
Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).