重叠列表函数在python中为True时返回False

2024-07-05 12:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个编程半新手,正在完成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

出于某种原因,它没有搜索所有的组合。任何帮助都将不胜感激。在


Tags: 函数infalsetrue列表for定义编程
3条回答

返回第一个循环的嵌套组合,因为它不是所有的循环。你可以这样做:

def over(list1,list2):
    for i in list1:
        for j in list2:
            if i == j:
                return True

    return False

一旦发现任何重叠,就会返回True。如果没有找到重叠,它将到达最后一行并返回False。在

问题是在第一次迭代时返回i==j。您的函数将只比较list1[0]和list2[0]。解决方案是添加if。 下面是一个例子:

def over(list1,list2):
    for i in list1:
        for j in list2:
            if i == j:
                return True
    return False

您应该使用其他答案中建议的if进行测试,因为在第一次迭代之后返回,但是使用any将是更好的方法:

def over(list1,list2):
    return any(i ==j for i in list1 for j in list2)

相当于:

^{pr2}$

对匹配项短路,如果有匹配项则返回True;如果没有匹配项,则返回False。在

或者使用集合进行更大的输入将是最快的方法:

def over(list1, list2):
    return not set(list1).isdisjoint(list2)

如果not set(list1).isdisjoint(list2)为真,则至少有一个公共元素。在

相关问题 更多 >