设计一个等效于以下语句的逻辑表达式:
x
是一个由三个或五个元素组成的列表,其中第二个元素是字符串'Hip'
,而第一个元素不是数字或布尔值。
是)我有的:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
我的问题:你如何检查它是布尔值还是数字?
设计一个等效于以下语句的逻辑表达式:
x
是一个由三个或五个元素组成的列表,其中第二个元素是字符串'Hip'
,而第一个元素不是数字或布尔值。
是)我有的:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
我的问题:你如何检查它是布尔值还是数字?
要回答具体问题:
isinstance(x[0], (int, float))
这将检查是否x[0]
是 tuple 中任何类型的实例(int, float)
。
你也可以bool
在那里添加,但这不是必需的,因为bool
它本身就是int
.
文档参考:
要评论您当前的代码,您不应该依赖短字符串的实习。您应该将字符串与==
运算符进行比较:
x[1] == 'Hip'
最简单的我会说:
type(x) == type(True)
在 python3 中,这将是:type(x)==bool
参见示例。
蟒蛇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
我按照最近的回答谁告诉使用,根据验证type
,这似乎是不正确的方法:pylint
我收到消息:
C0123:使用 type() 而不是 isinstance() 进行类型检查。(单一类型检查)
即使这是一个旧答案,正确的答案是@Lev Levitsky 的公认答案:
isinstance(x[0], (int, float))
我喜欢让它简单易读。这将接受 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