2016-05-16 107 views
0

我正在查找集合是否包含除包含在另一集合中的集合之外的任何值。确定一个集合是否包含不同于另一集合中的值的集合

目前我的代码:

set_entered = set(["ok_word_1", "ok_word_2", "not_ok_word"]) 
set_allowable = set(["ok_word_1", "ok_word_2","ok_word_3", "ok_word_4"]) 

set_entered_temp = set(set_entered) 
for item in set_allowable : 
    set_1_temp.discard(item) 
if len(set_entered_temp) > 0: 
    print ("additional terms") 
else: 
    print ("no additional terms") 

是否有这样做的一个简单的方法?显然很容易看到一个集合是否包含一个元素[例如集合],但看不到一个明显的方式来看一个集合是否包含一个元素而不是集合中的元素。

更新

只是为了澄清,我只是想看看是否有在entered set这个术语没有出现在allowable集。 [也就是说,并不是要看看两组之间是否存在差异,而是要看输入组中是否有值不在另一组中]。

+1

那就是'set.difference()'是 – Kasramvd

+1

您更新后:这仍然是什么'set.difference'是:'{1,2} .difference({2 ,3}) - > {1}“它不担心第二组中包含的内容,但不包含第一组中的内容。 –

+0

您可能会考虑['set.symmetric_difference'](https://docs.python.org/2/library/stdtypes.html#set.symmetric_difference):'{1,2} .symmetric_difference({2,3 }) - > {1,3}' –

回答

5

可以substract两套:

if set_1 - set_2: 
    print("Additional terms") 

set_2每个元素都将set_1被删除。如果结果集不为空,这意味着set_1中至少有一个值不包含在set_2中。

请注意,空集被解释为False,这就是为什么if条件起作用。

3

只需计算两个sets的差异即可。

difference(other, ...)

set - other - ...

返回一个新的集合与集合 元素不在别人。

x = bool(set_1 - set_2) # if boolean is needed 

if set_1 - set_2: # simple check in boolean context 
    pass 
2
set_diff = set_1.difference(set_2) 
if set_diff: 
    print ("additional terms") 
else: 
    print ("no additional terms") 
相关问题