当我有两套时,例如
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
。有没有更好的方法呢?
答案 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 True
或return False
。
def check_set(s1, s2):
return bool(s1 and s1.issubset(s2))
答案 4 :(得分:-1)
您可以使用具有空值的集合,而不是使用空集:
s1 = set([''])
或s1 = set([None])
然后您的print
声明将按预期工作。