55

设计一个等效于以下语句的逻辑表达式:

x是一个由三个或五个元素组成的列表,其中第二个元素是字符串'Hip',而第一个元素不是数字或布尔值。

是)我有的:

x = ['Head', 'Hip', 10]
print x[1] is 'Hip'

我的问题:你如何检查它是布尔值还是数字?

4

7 回答 7

73

要回答具体问题:

isinstance(x[0], (int, float))

这将检查是否x[0]是 tuple 中任何类型的实例(int, float)

你也可以bool在那里添加,但这不是必需的,因为bool它本身就是int.

文档参考:


要评论您当前的代码,您不应该依赖短字符串的实习。您应该将字符串与==运算符进行比较:

x[1] == 'Hip'
于 2013-02-22T08:33:49.087 回答
39

最简单的我会说:

type(x) == type(True)
于 2016-01-05T13:51:47.940 回答
32

在 python3 中,这将是:type(x)==bool参见示例

于 2016-08-02T07:54:28.320 回答
14

蟒蛇2

import types

x = False
print(type(x) == types.BooleanType) # True

蟒蛇 3

# No need to import types module
x = False
print(type(x) == bool) # True
于 2015-09-25T20:38:20.183 回答
5

您应该将类​​型xbool类进行比较:

type(x) == bool

或者:

type(x) == type(True)

这是有关类型方法的更多信息

来自数据模型文档

布尔值 (bool)

这些代表真值 False 和 True。表示值 False 和 True 的两个对象是唯一的布尔对象。布尔类型是整数类型的子类型,布尔值在几乎所有上下文中的行为分别类似于值 0 和 1,例外是当转换为字符串时,返回字符串“False”或“True” , 分别。

于 2018-07-09T18:22:58.417 回答
0

我按照最近的回答谁告诉使用,根据验证type,这似乎是不正确的方法:pylint

我收到消息:

C0123:使用 type() 而不是 isinstance() 进行类型检查。(单一类型检查)

即使这是一个旧答案,正确的答案是@Lev Levitsky 的公认答案:

isinstance(x[0], (int, float))
于 2019-05-15T15:27:11.853 回答
0

我喜欢让它简单易读。这将接受 bool、string、number 并将其读入 bool

def var2bool(v):
if type(v) == type(True):
    res = v
elif type(v) == type(0):
    if v == 0:
        res = False
    else:
        res = True
elif v.lower() in ("yes", "true", "t", "1"):
    res = True
else:
    res = False
return res
于 2020-10-15T01:04:21.887 回答