2014-10-28 52 views
3

嗨,有人可以阐明在Python中工作“in”运算符的机制。(a不在b)与(不在b中)之间的区别。 Python

现在我处理的例子如下:

print ('a' not in ['a', 'b']) # outputs False 
print (not 'a' in ['a', 'b']) # outputs False -- how ??? 

print ('c' not in ['a', 'b']) # outputs True 
print (not 'c' in ['a', 'b']) # outputs True 


print (not 'a') # outputs False 
# ok is so then... 
print (not 'a' in ['b', False]) # outputs True --- why ??? 

我现在在奇怪怎么可以如此。如果有人知道,请分享你的知识。 谢谢=)

+4

'不在'和'不在'等于 – 2014-10-28 16:54:34

+1

请注意,python styleguide说你应该使用'不在',即使他们这样做。 – 2014-10-28 16:58:21

+0

你可以在['b',False]中很容易地将它改成'(不是'a'),这会给你你显然期望的答案(因为parens总是表示更高的优先级) – 2014-10-28 17:00:21

回答

8

in has higher precedence than not。因此,执行遏制检查,如果需要,结果将被否定。 'a'不在['b', False]中,并且由此产生的False被否定为导致True

2

not关键字基本上“倒退”在这里返回的布尔值。

对于第一个例子,a在数组中,所以这是真的,但not true是错误的。太假了。

对于第二个示例,a不在数组中,所以这是错误的,但not false为真。如此真实。

0

print (not 'a' in ['a', 'b'])

休息下来是这样的:

not 'a'本身的计算结果为False(因为任何事情都视为True除了0,无,假,空列表,空字典)

false不在['a','b']所以 False in ['a','b']评估为False

并在最后一个not 'a'计算结果为False所以False in ['b', False]计算为True

相关问题