我想编写一个函数,如果两个集合共享某些数字则返回true,如果不相同则显然为false(显然)。
这是我到目前为止所拥有的:
def contains(set1, set2):
set1 = [5,2,9,1,3]
set2 = [3,8,9,1,4]
set_of_nums1, set_of_nums2 = set(set1), set(set2)
for i in set1:
if i in set2:
return True
return False
contains (set([5,2,9,1,3]), set([3,8,9,1,4]))
应该有效,但我没有回报。怎么会?
答案 0 :(得分:4)
这只是你的缩进错了。如果你在set 2中有第一个set1数,你的代码现在只返回True
,因为如果i不在set2中,它会在循环的第一次迭代中返回True
。只需修复它:
def contains(set1, set2):
set1 = [5,2,9,1,3]
set2 = [3,8,9,1,4]
for i in set1:
if i in set2:
return True
return False
然而,正如评论中所指出的,这不是最实际的方法
但是,没有任何意义,你接受2个输入,然后完全覆盖它们带来的值。您应该声明这样的函数:def contains():
并且不接受任何输入,或者您应该删除那些改变set1和set2的值的2行,甚至在使用作为输入传递的值之前。
答案 1 :(得分:4)
用@ built in method检查集合是否至少共享一个项目,如@jonrsharpe在评论中指出的那样:
if set1.intersection(set2):
# share an element
或使用交叉算子(&
)
if set1 & set2:
# share an element