Проверьте, является ли объект числом или логическим
Создайте логическое выражение, эквивалентное следующему выражению:
x
- это список из трех или пяти элементов, вторым элементом которого является строка 'Hip'
и первая из которых не является числом или булевым.
Что у меня:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
Мой вопрос: как вы проверяете, является ли это логическим или числовым?
Ответы
Ответ 1
Чтобы ответить на конкретный вопрос:
isinstance(x[0], (int, float))
Это проверяет, является ли x[0]
экземпляром любого из типов в кортеже (int, float)
.
Здесь вы можете добавить bool
, но это не обязательно, потому что bool
сам является подклассом int
.
Ссылка на Doc:
Чтобы прокомментировать ваш текущий код, вы не должны полагаться на интернирование коротких строк. Вы должны сравнить строки с оператором ==
:
x[1] == 'Hip'
Ответ 2
Самый простой, я бы сказал:
type(x) == type(True)
Ответ 3
В python3 это будет: type(x)==bool
см. Пример.
Ответ 4
import types
type(x) == types.BooleanType
Ответ 5
Вы должны сравнить тип x
с классом bool
:
type(x) == bool
или же:
type(x) == type(True)
Вот больше о методе типа
Из документов модели данных:
Booleans (bool)
Они представляют ценности истины Ложь и Истина. Два объекта, представляющих значения False и True, являются единственными логическими объектами. Логический тип является подтипом целочисленного типа, а логические значения ведут себя как значения 0 и 1, соответственно, почти во всех контекстах, за исключением того, что при преобразовании в строку возвращаются строки "False" или "True" соответственно.
Ответ 6
Я следую недавнему ответу, который говорит использовать type
и он кажется неправильным в соответствии с валидацией pylint
:
Я получил сообщение:
C0123: Использование type() вместо isinstance() для проверки типов. (Unidiomatic-typecheck)
Даже если это старый ответ, правильный ответ - @Lev Levitsky:
isinstance(x[0], (int, float))