1

我需要使用循环编写代码来确定两个列表中是否有任何共同元素。所以,我写了以下内容:

l1 = eval(input("Enter a list: "))
l2 = eval(input("Enter another list: "))
for i in range (len(l1)):
        for j in range (len(l2)):
                if l1[i] == l2[j]:
                        print("Overlapped")
                        break
else:
        print("Separated")

但是,我得到的输出是这样的:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
Overlapped
Separated

由于列表确实有一个共同的成员,它应该只打印“重叠”,但它最终也会打印“分离”。

我该如何解决?我正在使用 python 3.7

太感谢了!!

4

2 回答 2

1

创建一个元组列表(i, j)并使用单个for循环遍历元组列表。因此,要么输出是"Overlapped"并且循环中断,要么else执行子句并且输出是"Separated"

for i, j in [(i, j) for i in range(len(l1)) for j in range(len(l2))]:
    if l1[i] == l2[j]:
        print("Overlapped")
        break
else:
    print("Separated")

输出:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
Overlapped

Enter a list: [1,34,543,5,23,"apple"]
Enter another list:  [54,234567,6,213,"banana"]
Separated

或者,您可以使用相等列表元素的索引创建一个元组列表。最后检查列表是否为空:

equal = [(i, j) for i in range (len(l1)) for j in range(len(l2)) if l1[i] == l2[j]]
if equal:
     print("Overlapped")
else:
     print("Separated")  
于 2019-02-02T23:12:07.217 回答
0

由于您需要跳出两个循环else才能按预期工作,我认为这里根本不使用会更容易else。如果你在一个函数中定义你的代码,你可以用它return来同时跳出两个循环。

例如:

def have_common_elements():
    l1 = eval(input("Enter a list: "))
    l2 = eval(input("Enter another list: "))
    for i in range (len(l1)):
        for j in range (len(l2)):
            if l1[i] == l2[j]:
                return True
    return False # will only happen if the previous `return` was never reached, similar to `else`

have_common_elements()

样本:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
True

Enter a list: [1,34,543,5,25,"apple"]
Enter another list: [54,23,6,213,"banana"]
False
于 2019-02-02T23:05:43.060 回答