Python 使用issubset和空集时如何返回False

Python 使用issubset和空集时如何返回False,python,optimization,set,Python,Optimization,Set,当我有两套时 s1 = set() s2 = set(['somestring']) 我也是 print s1.issubset(s2) 它返回True;显然,一个空集总是另一个集合的子集 对于我的分析,它实际上应该返回False,我想知道最好的方法是什么。我可以编写如下函数: def check_set(s1, s2): if s1 and s1.issubset(s2): return True return False s1 <= s2

当我有两套时

s1 = set()    
s2 = set(['somestring'])
我也是

print s1.issubset(s2)
它返回
True
;显然,一个空集总是另一个集合的子集

对于我的分析,它实际上应该返回
False
,我想知道最好的方法是什么。我可以编写如下函数:

def check_set(s1, s2):
    if s1 and s1.issubset(s2):
        return True
    return False
s1 <= s2 if s1 else False

对于上面的示例,它确实返回
False
。有更好的方法吗?

我会这样做:

def check_set(s1, s2):
    if s1 and s1.issubset(s2):
        return True
    return False
s1 <= s2 if s1 else False

s1如果不使用
if
,您可以通过执行以下操作将结果强制为
bool

def check_set(s1, s2):
    return bool(s1 and s1.issubset(s2))

为什么不直接返回值呢?这样,您就不必编写
返回True
返回False

def check_set(s1, s2):
    return bool(s1 and s1.issubset(s2))

您可以使用具有空值的集合,而不是使用空集合:

s1=set([''])
s1=set([None])


然后,您的
print
语句将如您所期望的那样工作。

您可以利用Python如何评估对象的真实性,以及它如何通过以下方式短路布尔
表达式:

bool(s1) and s1 <= s2

bool(s1)和s1这比我的方法好多少,你能详细说明一下吗?例如,它会更快吗?它会更快,因为它使用设置支持的内置运算符,而不是使用函数调用和属性查找。这在逻辑上是等价的。好的,谢谢。是否有一个适合
的页面是
Ok,在这个页面上写着这两个命令是等效的(如果我理解正确的话)。将按时进行一些测试…现在您不知道返回值的类型,它将是set或bool。这并不理想……如果没有
bool
(然后就是答案@Mr.goosberry posted)。@Cleb会的,但我想我忽略了返回值可能不同的事实。@Mr.goosberry:是的,我也错过了。(现在投了赞成票)我不认为他试图修正他的书面声明。我相信他是在要求在他的
check\u set()
函数中使用更好的方法返回false。(我没有否决你的答案)也许@Cleb可以澄清这一点?虽然这个答案改变了假设,但它可能会简化整个问题;我想得到一种简单快速的方法来返回
False
,以防与空集进行比较。(我也没有投反对票)