我需要写一段代码,使用循环来找出两个列表中是否有公共元素。因此,我写了以下内容:
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
非常感谢!
发布于 2019-02-03 07:12:07
创建元组列表(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")输出:
输入一个列表: 1,34,543,5,23,"apple“输入另一个列表: 54,23,6,213,"banana”重叠
输入列表: 1,34,543,5,23,“
”输入另一个列表: 54,234567,6,213,"banana“分隔
或者,您可以使用相等列表元素的索引创建一个元组列表。最后,检查列表是否为空:
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-03 07:05:43
由于您需要打破这两个循环才能使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"]
Falsehttps://stackoverflow.com/questions/54498338
复制相似问题