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

时间:2016-10-03 17:44:18

标签: 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

然后确实为上面的例子返回False。有没有更好的方法呢?

5 个答案:

答案 0 :(得分:4)

我会这样做:

s1 <= s2 if s1 else False

它应该更快,因为它使用集支持的内置运算符,而不是使用更昂贵的函数调用和属性查找。它在逻辑上是等价的。

答案 1 :(得分:2)

通过执行此操作,您可以强制结果为if,而不是使用bool

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

答案 2 :(得分:2)

您可以利用Python如何评估对象的真实性加上如何将布尔and表达式与以下内容短路:

bool(s1) and s1 <= s2

基本上这意味着:如果s1不是空的并且它是s2

的子集

答案 3 :(得分:1)

为什么不直接返回值?这样,您就可以避免写return Truereturn False

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

答案 4 :(得分:-1)

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

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

然后您的print声明将按预期工作。