[英]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.