我是一个编程半新手,正在完成Torbjoern Lager的46个简单Python练习。这是第10个:定义一个函数overlapping(),它接受两个列表,如果它们至少有一个共同的成员,则返回True,否则返回False。您可以使用is_member()函数或in运算符,但为了练习起见,您应该(也)使用两个嵌套的for循环编写它。在
def over(list1,list2):
for i in list1:
for j in list2:
return i==j
我以为我有一个很好的简单的解决方案,但是它不能识别出列表是重叠的,除非重叠的元素是第一个。在
^{pr2}$返回False
over(["a","b","c","d"],["a","f","g","h"])
返回True
出于某种原因,它没有搜索所有的组合。任何帮助都将不胜感激。在
返回第一个循环的嵌套组合,因为它不是所有的循环。你可以这样做:
一旦发现任何重叠,就会返回
True
。如果没有找到重叠,它将到达最后一行并返回False
。在问题是在第一次迭代时返回
i==j
。您的函数将只比较list1[0]和list2[0]。解决方案是添加if
。 下面是一个例子:您应该使用其他答案中建议的if进行测试,因为在第一次迭代之后返回,但是使用any将是更好的方法:
相当于:
^{pr2}$对匹配项短路,如果有匹配项则返回True;如果没有匹配项,则返回False。在
或者使用集合进行更大的输入将是最快的方法:
如果
not set(list1).isdisjoint(list2)
为真,则至少有一个公共元素。在相关问题 更多 >
编程相关推荐