簡體   English   中英

使用 For-Else 執行這兩個條件。 我該如何解決?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM