[英]Using a For-Else executes both the conditions. How do I fix this?
我需要使用循环编写代码以找出两个列表中是否有任何公共元素。 所以,我写了以下内容:
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
非常感谢!!
创建元组列表(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")
由于您需要打破两个循环才能让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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.