Python проверка что строка это число
Проверка на число
Достаточно часто требуется узнать: записано ли в переменной число. Такая ситуация может возникнуть при обработке введенных пользователем данных. При чтении данных из файла или при обработке полученных данных от другого устройства.
В Python проверка строки на число можно осуществить двумя способами:
Рассмотрим как применяются эти способы на практике.
isdigit, isnumeric и isdecimal
У строк есть метод isdigit, который позволяет проверить, являются ли символы, являются ли символы, из которых состоит строка цифрами. С помощью этого метода мы можем проверить, записано ли в строку целое положительное число или нет. Положительное — это потому, что знак минус не будет считаться цифрой и метод вернет значение False.
Если в строка будет пустой, то функция возвратит False.
Методы строки isnumeric и isdecimal работают аналогично. Различия в этих методах только в обработке специальных символов Unicode. А так как пользователь будет вводить цифры от 0 до 9, а различные символы, например, дробей или римских цифр нас не интересуют, то следует использовать функцию isdigit.
Проверка с помощью исключения
Что же делать, если требуется проверить строку на отрицательное число. В Python с помощью isdigit не удастся определить отрицательное число или число с плавающей точкой. В этом случае есть универсальный и самый надежный способ. Надо привести строку к вещественному числу. Если возникнет исключение, то значит в строке записано не число.
Приведем функцию и пример ее использования:
Для целых чисел
Аналогично можно сделать и проверку на целое число:
Как проверить, является ли строка числом (float)?
Каков наилучший способ проверить, может ли строка быть представлена в виде числа в Python?
Теперь у меня есть функция:
Который, не только уродливый и медленный, кажется неуклюжим. Однако я не нашел лучшего метода, потому что вызов float в основной функции еще хуже.
ОТВЕТЫ
Ответ 1
Что не только уродливо и медленно
Регулярное выражение или другой метод синтаксического анализа строк будет более уродливым и медленным.
Я не уверен, что все может быть быстрее, чем выше. Вызывает функцию и возвращает. Try/Catch не создает больших накладных расходов, поскольку наиболее распространенное исключение перехватывается без расширенного поиска кадров стека.
Проблема в том, что любая функция преобразования чисел имеет два вида результатов
C (в качестве примера) взломает это несколькими способами. Python излагает это ясно и явно.
Я думаю, что ваш код для этого идеально подходит.
Ответ 2
Если вы ищете синтаксические (положительные, беззнаковые) целые числа вместо чисел с плавающей точкой, вы можете использовать функцию isdigit() для строковых объектов.
Ответ 3
Я сделал некоторые тесты, сравнивающие разные подходы
Обозначение с плавающей запятой «.1234» не поддерживается:
— is_number_regex
Научная нотация «1.000000e + 50» не поддерживается:
— is_number_regex
— is_number_repl_isdigit
Научная нотация «1e50» не поддерживается:
— is_number_regex
— is_number_repl_isdigit
EDIT: результаты тестов
где были протестированы следующие функции:
Ответ 4
Есть одно исключение, которое вы можете принять во внимание: строка «NaN»
Если вы хотите, чтобы is_number возвращал FALSE для «NaN», этот код не будет работать, поскольку Python преобразует его в свое представление числа, которое не является числом (говорить о проблемах с идентификацией):
В противном случае, я должен поблагодарить вас за кусок кода, который я сейчас широко использую.:)
Ответ 5
который вернет true, только если есть один или нет. в строке цифр.
Ответ 6
Обновлено после того, как Alfe указал, что вам не нужно отдельно проверять float как сложные дескрипторы:
Ранее говорилось: есть ли некоторые редкие случаи, которые вам также могут понадобиться для проверки сложных чисел (например, 1 + 2i), которые не могут быть представлены с помощью float:
Ответ 7
Который, не только уродливый и медленный, кажется неуклюжим.
Это может занять некоторое время, но это питонический способ сделать это. Как уже отмечалось, альтернативы хуже. Но есть еще одно преимущество в этом: полиморфизм.
Центральная идея утиной печати заключается в том, что «если она ходит и разговаривает, как утка, то это утка». Что, если вы решите, что вам нужно подклассифицировать строку, чтобы вы могли изменить, как вы определяете, может ли что-то быть преобразовано в float? Или что, если вы решите полностью протестировать какой-либо другой объект? Вы можете делать это без изменения вышеуказанного кода.
Другие языки решают эти проблемы с помощью интерфейсов. Я сохраню анализ того, какое решение лучше для другого потока. Дело в том, что python определенно зависит от утиной печатной стороны уравнения, и вам, вероятно, придется привыкнуть к синтаксису, например, если вы планируете много программировать на Python (но это не значит вам это должно понравиться, конечно).
Ответ 8
Для int используйте это:
Но для float нам нужны некоторые трюки;-). Каждое число с плавающей точкой имеет одну точку.
Также для отрицательных чисел просто добавьте lstrip() :
И теперь мы получаем универсальный способ:
Ответ 9
Просто Mimic С#
В С# существуют две различные функции, которые обрабатывают разбор скалярных значений:
float.parse():
Примечание. Если вам интересно, почему я изменил исключение на TypeError, здесь документацию.
float.try_parse():
Примечание. Вы не хотите возвращать логическое значение «False», потому что это еще тип значения. Нет лучше, потому что это указывает на сбой. Конечно, если вы хотите что-то другое, вы можете изменить параметр fail на все, что хотите.
Чтобы расширить float, чтобы включить «parse()» и «try_parse()», вам нужно будет обезвредить класс «float», чтобы добавить эти методы.
Если вы хотите уважать ранее существовавшие функции, код должен выглядеть примерно так:
SideNote: Я лично предпочитаю называть это Monkey Punching, потому что кажется, что я злоупотребляю языком, когда я это делаю, но YMMV.
Применение:
И великий мудрец Пифон сказал Священному Престолу Шарпису: «Все, что вы можете сделать, я могу сделать лучше, я могу сделать что-нибудь лучше вас».
Ответ 10
Для строк не чисел, try: except: на самом деле медленнее, чем регулярные выражения. Для строк допустимых чисел регулярное выражение работает медленнее. Таким образом, соответствующий метод зависит от вашего ввода.
Если вы обнаружите, что находитесь в привязке к производительности, вы можете использовать новый сторонний модуль под названием fastnumbers, который обеспечивает функция называется isfloat. Полное раскрытие, я автор. Я включил его результаты в тайминги ниже.
Как вы можете видеть
Ответ 11
Я знаю, что это особенно старый, но я бы добавил ответ, который, как я полагаю, охватывает информацию, отсутствующую в самом высоком голосовом ответе, который может быть очень ценным для тех, кто найдет это:
Для каждого из следующих методов соедините их со счетчиком, если вам нужен какой-либо ввод, который будет принят. (Предполагая, что мы используем голосовые определения целых чисел, а не 0-255 и т.д.)
x.isdigit() хорошо работает для проверки того, является ли x целым числом.
x.replace(‘-‘,»).isdigit() хорошо работает для проверки того, является ли x отрицательным. (Первая запись в первой позиции)
x.replace(‘.’,»).isdigit() хорошо работает для проверки, является ли x десятичным.
x.replace(‘:’,»).isdigit() хорошо работает для проверки, является ли x отношением.
x.replace(‘/’,»,1).isdigit() хорошо работает для проверки того, является ли x дробной.
Ответ 12
Ответ 13
Вы можете использовать строки Unicode, у них есть способ сделать именно то, что вы хотите:
Ответ 14
Этот ответ предоставляет пошаговое руководство, в котором функция с примерами для поиска строки:
Проверьте, является ли строка положительным целым числом
str.isdigit() возвращает False если строка является отрицательным числом или числом с плавающей точкой. Например:
Если вы хотите также проверить отрицательные целые числа и float , вы можете написать пользовательскую функцию, чтобы проверить ее как:
Отбросьте строки «NaN» (не число) при проверке номера
Вышеупомянутые функции вернут True для строки «NAN» (Not number), потому что для Python это допустимое значение float, представляющее его, не является числом. Например:
Следовательно, выше функция is_number может быть обновлена, чтобы вернуть False для «NaN» следующим образом:
PS: Каждая операция для каждой проверки в зависимости от типа номера имеет дополнительные накладные расходы. Выберите версию функции is_number которая соответствует вашим требованиям.
Ответ 15
Обратите внимание, что проверка на успешное выполнение является единственным методом, который является точным, например, это работает с check_exception но две другие тестовые функции возвращают False для действительного float:
Вот результаты с Python 2.7.10 на MacBook Pro 201:
Вот результаты с Python 3.6.5 на MacBook Pro 201:
Ниже приведены результаты с PyPy 2.7.13 на MacBook Pro 201:
Ответ 16
Итак, чтобы собрать все вместе, проверив Nan, бесконечность и комплексные числа (казалось бы, они указаны с j, а не i, то есть 1 + 2j), это приводит к:
Ответ 17
Допустим, у вас есть цифры в строке. str = «100949» и вы хотите проверить, есть ли у него только числа
в противном случае ваш метод отлично работает, чтобы найти появление цифры в строке.
Ответ 18
Ваш код выглядит хорошо для меня.
Возможно, вы считаете, что код «неуклюжий» из-за использования исключений? Обратите внимание, что программисты Python склонны использовать исключения либерально, когда улучшают удобочитаемость кода благодаря его низкой производительности.
Ответ 19
Я сделал несколько тестов скорости. Предположим, что если строка вероятна является числом, стратегия try/except является самой быстрой. Если строка не вероятна как число и, вас интересует проверка Integer, стоит сделать какой-то тест (isdigit plus heading ‘-‘). Если вам интересно проверить число с плавающей запятой, вам нужно использовать escape/исключение кода без выхода.
Ответ 20
Мне нужно было определить, была ли строка передана в базовые типы (float, int, str, bool). После того, как я ничего не нашел в Интернете, я создал это:
Вы можете захватить тип и использовать его
Ответ 21
Ввод может быть следующим:
1-Общий вход:
Ввод этой функции может быть любым!
Находит, является ли данная переменная числовой. Числовые строки состоят из необязательного знака, любого количества цифр, необязательной десятичной части и необязательной экспоненциальной части. Таким образом, +0123.45e6 является допустимым числовым значением. Шестнадцатеричная (например, 0xf4c3b00c) и двоичная (например, 0b10100111001) нотация не допускается.
is_numeric функция
функция is_float
Находит, является ли данная переменная плавающей. Строки float состоят из необязательного знака, любого количества цифр.
2- Если вы уверены, что переменным содержимым является строка:
3-числовой вход:
определить значение int:
обнаружить поплавок:
Ответ 22
Ответ 23
Я думаю, что ваше решение в порядке.
Сказав это, есть много ненависти регулярных выражений к этим ответам, которые я считаю неоправданными, регулярные выражения могут быть достаточно чистыми, правильными и быстрыми. Это действительно зависит от того, что вы пытаетесь сделать. Первоначальный вопрос заключался в том, как можно «проверить, можно ли представить строку в виде числа (с плавающей запятой)» (согласно вашему названию). Предположительно, вы захотите использовать числовое значение/значение с плавающей запятой после того, как вы проверите, что оно действительно, и в этом случае ваши попытки/кроме имеют большой смысл. Но если по какой-то причине вы просто хотите проверить, что строка является числом, тогда регулярное выражение также работает нормально, но его трудно получить правильно. Я думаю, что большинство ответов на регулярные выражения до сих пор, например, неправильно анализируют строки без целочисленной части (такой как «.7»), которая является плавающей точкой в том, что касается python. И это немного сложно проверить в одном регулярном выражении, где дробная часть не требуется. Я включил два регулярных выражения, чтобы показать это.
Это поднимает интересный вопрос о том, что такое «число». Вы включаете «inf», который является допустимым как float в python? Или вы включаете числа, которые являются «числами», но, возможно, не могут быть представлены в Python (например, числа, которые больше, чем максимум с плавающей точкой).
В любом случае, без дополнительной информации, здесь регулярное выражение, которое, как я считаю, охватывает все целые числа и числа с плавающей запятой, когда python анализирует их.
Некоторые примеры тестовых значений:
Ответ 24
Вы можете использовать регулярное выражение.
Ответ 25
Я также использовал указанную вами функцию, но вскоре я заметил, что строки как «Нан», «Инф» и ее вариация считаются цифрами. Поэтому я предлагаю вам улучшенную версию вашей функции, которая вернет false для этих типов ввода и не выйдет из строя «1e3» вариантов:
Ответ 26
Ответ 27
Этот код обрабатывает показатели, числа с плавающей точкой и целые числа, без использования регулярных выражений.
Ответ 28
Если вы хотите знать, может ли вся строка быть представлена в виде числа, вы хотите использовать regexp (или, возможно, преобразовать float в строку и сравнить ее с исходной строкой, но я предполагаю, что не очень быстро).
Ответ 29
Вот мой простой способ сделать это. Скажем, что я перебираю некоторые строки, и я хочу добавить их в массив, если они окажутся числами.
Замените myvar.apppend любой операцией, которую вы хотите сделать с строкой, если она окажется числом. Идея состоит в том, чтобы попытаться использовать операцию float() и использовать возвращаемую ошибку, чтобы определить, является ли строка числом.
Ответ 30
Вы можете обобщить технику исключения полезным способом, возвращая более полезные значения, чем True и False. Например, эта функция ставит кавычки вокруг строк, но оставляет числа в одиночку. Это именно то, что мне нужно для быстрого и грязного фильтра, чтобы сделать некоторые определения переменных для R.
5 Способов проверить, является ли строка целочисленной в Python
В этой статье мы познакомимся с пятью доминирующими способами проверки того, является ли данная строка python целым числом или нет. Это очень полезно
5 Способов проверить, является ли строка целочисленной в Python
Много раз, выполняя некоторые проекты или, возможно, простое программирование, нам нужно ограничить, является ли данная строка Python целым числом или нет. Итак, в этой подробной статье вы узнаете о пяти доминирующих способах проверки того, является ли данная строка python целым числом или нет.
Итак, не теряя времени, давайте сразу перейдем к способам проверки python, является ли строка целочисленной.
Некоторые элитные способы Python Проверить, является ли строка целочисленной
1. Проверка Того, является ли Заданная или Входная строка Целочисленной или Не использует isnumeric функцию
Функция isnumeric() Python может быть использована для проверки того, является ли строка целым числом или нет. isnumeric () – это встроенная функция. Он возвращает True, если все символы числовые, в противном случае False.
Синтаксис
Параметры
Метод isnumeric() не принимает никаких параметров.
Примеры
Объяснение:
Примечание: Этот метод проверки того, является ли строка целым числом в Python, не будет работать в отрицательных числах.
2. Python Проверяет, Является Ли Строка Целочисленной, Используя Обработку исключений
Мы можем использовать python, чтобы проверить, является ли строка целочисленной, используя механизм обработки исключений. Если вы не знаете, как обрабатывается исключение в python, позвольте мне вкратце объяснить вам это. В Python исключения могут обрабатываться с помощью оператора try. Жизненно важная операция, которая может вызвать исключение, помещается в предложение try. Код, управляющий исключениями, записывается в предложении except. Таким образом, мы можем выбрать, какие операции делать, как только поймаем исключение.
Давайте посмотрим на примере, как это работает.
Синтаксис
Параметры
Механизм обработки исключений (try-except-finally) не принимает никаких параметров.
Примеры
Объяснение:
В приведенном выше примере мы инициализировали строку ‘s’ со значением ‘951 sd’. Изначально мы полагаем, что значение string ‘s’ является целым числом. Поэтому мы объявили, что это правда. После этого мы попытались преобразовать строку в целое число с помощью функции int. Если строка’s’содержит нечисловые символы, то ‘ int’выдаст ValueError, который укажет, что строка не является целым числом, и наоборот.
Кроме того, наряду с механизмом обработки исключений мы использовали операторы управления потоком для соответствующей печати выходных данных.
Примечание: Этот метод проверки того, является ли строка целым числом в Python, также будет работать с Отрицательными числами.
3. Python Проверяет, Является Ли Строка Целочисленной, Используя Функцию isdigit
Мы можем использовать функцию isdigit(), чтобы проверить, является ли строка целым числом или нет в Python. Метод isdigit() возвращает True, если все символы в строке являются цифрами. В противном случае он возвращает False.
Давайте посмотрим на примере, как это работает.
Синтаксис
Параметры
Метод isdigit() не принимает никаких параметров.
Возвращаемое значение функции isdigit()
Примеры
Объяснение:
Примечание: Функция ‘isdigit()’ будет работать только для положительных целых чисел, т. е. если вы передадите любое число с плавающей запятой, оно будет говорить, что это строка. Он не принимает никаких аргументов, поэтому возвращает ошибку при передаче параметра
4. Python Проверяет, Является Ли Строка Целочисленной, Используя Регулярное выражение
Мы можем использовать шаблон поиска, который известен как регулярное выражение, чтобы проверить, является ли строка целым числом или нет в Python. Если вы не знаете, что такое регулярное выражение и как оно работает в python, позвольте мне вкратце объяснить вам это. В Python регулярное выражение-это определенная последовательность символов, которая позволяет сопоставлять или находить другие строки или наборы строк со специализированным синтаксисом, удерживаемым в шаблоне. Регулярные выражения широко используются в мире UNIX.
Здесь мы используем метод match регулярного выражения, то есть re.match().Re. match() ищет только в первой строке строки и возвращает объект match, если он найден, иначе возвращает none. Но если совпадение подстроки находится в какой-то другой строке, кроме первой строки строки (в случае многострочной строки), она возвращает none.
Давайте посмотрим на примере, как это работает.
Синтаксис
Параметры
Возвращаемое значение
Примеры
Объяснение:
Примечание: Функция ‘re.match()’ также будет работать с отрицательными числами.
5. Python Проверяет, Является ли Строка Целочисленной, Используя функции any() и map()
Мы можем использовать комбинацию функций any() и map (), чтобы проверить, является ли строка целым числом или нет в Python. Если вы не знаете, что такое функции any() и map() и как они работают в python, позвольте мне кратко объяснить вам это.
Давайте рассмотрим на примерах, как они работают.
Синтаксис
Синтаксис любой функции()
Синтаксис функции map()
Параметры
любые Параметры функции()
iterable: Итеративный объект (список, кортеж, словарь)
Параметры функции map()
Функция: Функция, выполняемая для каждого элемента итерируемая Последовательность, коллекция или объект итератора. Вы можете отправить столько итераций, сколько захотите, просто убедитесь, что функция имеет один параметр для каждой итерации.
Возвращаемое значение
Примеры
Объяснение:
Мы получаем False, потому что входная строка ‘sd’.
Примечание: Этот метод также будет работать с отрицательными числами.
Приложения Python Проверяют, является ли строка целочисленной
Должен Читать
Вывод: Python Проверяет, является ли строка целочисленной
Поэтому, если вы сделаете это до конца, я почти уверен, что теперь вы сможете понять все возможные способы проверки того, является ли строка целочисленной в Python. Наилучший способ проверить, является ли строка целочисленной в Python, зависит от ваших потребностей и типа проекта, который вы делаете. Я думаю, вы тоже захотите это знать. Способы сортировки списка списков в Python. Если да, то в нашей библиотеке учебников есть потрясающий учебник, проверьте его.
Все еще есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Числа в Python (FAQ)
Ч исла в Python (как и в других языках программирования) чрезвычайно простое понятие. В Python все переменные представляют собой объекты и размещаются в динамической памяти.
Базовый набор 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