C.B*_*.B. 62 python python-2.7
如果我的函数在函数结束时为空,我正在努力寻找一种更简洁的返回布尔值的方法
我取两组的交集,并希望返回True
或False
基于结果集是否为空.
def myfunc(a,b):
c = a.intersection(b)
#...return boolean here
Run Code Online (Sandbox Code Playgroud)
我最初的想法是做
return c is not None
Run Code Online (Sandbox Code Playgroud)
但是,在我的翻译中,我可以很容易地看到该语句将返回true c = set([])
>>> c = set([])
>>> c is not None
True
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下所有方法:
>>> c == None
False
>>> c == False
False
>>> c is None
False
Run Code Online (Sandbox Code Playgroud)
现在,我已经从我只能用文档阅读and
,or
以及not
与空集来推断一个布尔值.到目前为止,我唯一能想到的就是回归而不是c
>>> not not c
False
>>> not c
True
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,有更多的pythonic方式来做到这一点,我正在努力找到它.我不想将实际的设置返回到if语句,因为我不需要值,我只想知道它们是否相交.
gef*_*fei 72
不像其他答案那样pythonic,而是数学:
return len(c) == 0
Run Code Online (Sandbox Code Playgroud)
Jon*_*fer 44
def myfunc(a,b):
c = a.intersection(b)
return bool(c)
Run Code Online (Sandbox Code Playgroud)
bool()
会做类似的事情not not
,但更具思想性和清晰性.
jon*_*rpe 18
如果你想要return True
一个空集,那么我认为它会更清楚:
return c == set()
Run Code Online (Sandbox Code Playgroud)
即" c
等于空set
".
(或者,换句话说,return c != set()
).
在我看来,这比False
在布尔上下文中依赖Python对空集的解释更明确(尽管不那么惯用).
Sim*_*ser 13
如果c
是一个集合,那么你可以通过以下方式检查它是否为空:return not c
.
如果c
是空的那么not c
将是True
.
否则,如果c
包含任何元素not c
会False
.
当你说:
c is not None
Run Code Online (Sandbox Code Playgroud)
您实际上是在检查 c 和 None 是否引用同一个对象。这就是“is”运算符所做的。在 python 中 None 是一个特殊的空值,通常意味着您没有可用的值。类似于 c 或 java 中的 null。由于python内部仅使用“is”运算符分配一个None值来检查某些内容是否为None(认为null)有效,因此它已成为流行的风格。然而,这与集合 c 的真值无关,它正在检查 c 实际上是一个集合而不是空值。
如果你想在条件语句中检查一个集合是否为空,它在上下文中被转换为一个布尔值,所以你可以说:
c = set()
if c:
print "it has stuff in it"
else:
print "it is empty"
Run Code Online (Sandbox Code Playgroud)
但是如果你想把它转换成一个布尔值来存储起来,你可以简单地说:
c = set()
c_has_stuff_in_it = bool(c)
Run Code Online (Sandbox Code Playgroud)