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
,以防与空集进行比较。(我也没有投反对票)