设计一个等同于以下语句的逻辑表达式:
x
是三个或五个元素的列表,其中第二个元素是 字符串'Hip'
,其中第一个不是数字或布尔值。
我有什么:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
我的问题:你如何检查它是否是布尔值或数字?
答案 0 :(得分:40)
回答具体问题:
isinstance(x[0], (int, float))
检查x[0]
是否是元组(int, float)
中任何类型的实例。
您也可以在其中添加bool
,但这不是必需的,因为bool
本身就是int
的子类。
文档参考:
要评论您当前的代码,您不应该依赖interning of short strings。您应该将字符串与==
运算符进行比较:
x[1] == 'Hip'
答案 1 :(得分:22)
我想说的最简单:
type(x) == type(True)
答案 2 :(得分:10)
在python3中,这将是:type(x)==bool
见example。
答案 3 :(得分:5)
import types
type(x) == types.BooleanType
答案 4 :(得分:2)
您应该将x
的类型与bool
类进行比较:
type(x) == bool
或:
type(x) == type(True)
上的内容更多
布尔值(布尔)
这些代表真值False和True。表示值False和True的两个对象是唯一的布尔对象。布尔类型是整数类型的子类型,并且布尔值在几乎所有上下文中的行为分别类似于值0和1,不同之处在于,当转换为字符串时,将返回字符串“ False”或“ True”分别。
答案 5 :(得分:0)
我遵循最近的回答,告诉他们使用type
,根据pylint
验证,这似乎是错误的方式:
我收到消息:
C0123:使用type()代替isinstance()进行类型检查。 (单字型检查)
即使是旧答案,正确的答案也是@Lev Levitsky的公认答案:
isinstance(x[0], (int, float))
答案 6 :(得分:0)
我喜欢保持简单易读。 这将接受布尔值,字符串,数字并将其读取为布尔值
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