如果我的函数在函数结束时为空,我很难找到更简洁的返回布尔值的方法
我选择了两组的交集,并希望根据结果集是否为空来返回True
或False
。
def myfunc(a,b):
c = a.intersection(b)
#...return boolean here
我最初的想法是
return c is not None
但是,在我的翻译中,我很容易看到如果c = set([])
>>> c = set([])
>>> c is not None
True
我也尝试了以下所有方法:
>>> c == None
False
>>> c == False
False
>>> c is None
False
现在我从文档中读到,我只能使用空集and
,or
和not
推导出布尔值。到目前为止,我唯一能想到的就是返回而不是c
>>> not not c
False
>>> not c
True
我觉得有更多的pythonic方法可以做到这一点,我很难找到它。我不想将实际的设置返回到if语句,因为我不需要这些值,我只是想知道它们是否相交。
答案 0 :(得分:59)
不像其他答案那样是pythonic,而是数学:
return len(c) == 0
答案 1 :(得分:31)
def myfunc(a,b):
c = a.intersection(b)
return bool(c)
bool()
会执行类似于not not
的操作,但会更加理想和清晰。
答案 2 :(得分:14)
如果你想return True
为空集,那么我认为这样做会更清楚:
return c == set()
即。 “c
等于空set
”。
(或者,相反,return c != set()
)。
在我看来,这比在布尔上下文中依赖Python将空集解释为False
更明确(尽管不那么惯用)。
答案 3 :(得分:11)
如果c
是一个集合,那么您可以执行以下操作来检查它是否为空:return not c
。
如果c
为空,则not c
将为True
。
否则,如果c
包含任何元素not c
将为False
。
答案 4 :(得分:3)
当你说:
c is not None
您实际上正在检查c和None是否引用相同的对象。这就是“是”运营商所做的事情。在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"
但是如果你想将它转换成一个布尔值来存储,你可以简单地说:
c = set()
c_has_stuff_in_it = bool(c)
答案 5 :(得分:0)
不像bool(c)那样干净,但它是使用三元的借口。
def myfunc(a,b):
return True if a.intersection(b) else False
同样使用一些相同的逻辑,除非你将它用于别的东西,否则不需要分配给它。
def myfunc(a,b):
return bool(a.intersection(b))
最后,我假设你想要一个True / False值,因为你要用它来执行某种布尔测试。我建议通过简单地测试你需要的地方来跳过函数调用和定义的开销。
而不是:
if (myfunc(a,b)):
# Do something
也许这个:
if a.intersection(b):
# Do something
答案 6 :(得分:0)
"""
This function check if set is empty or not.
>>> c = set([])
>>> set_is_empty(c)
True
:param some_set: set to check if he empty or not.
:return True if empty, False otherwise.
"""
def set_is_empty(some_set):
return some_set == set()