2017-11-11 119 views
0

嘿,我正在爲星期二爲Python課程進行的考試進行評估,我試圖製作一個程序來檢查2個列表,看它們是否具有相同的項目/值,但順序不同。爲什麼我的比較程序無法正常工作?

這是我到目前爲止有:

def reOrder(list1, list2): 
    if len(list1) != len(list2): 
     return False 
    for element1 in list1: 
     foundElement = False 
     for element2 in list2: 
      if element1 == element2: 
       foundElement = True 
     if foundElement == False: 
      return False 
     else: 
      return True 


print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4])) 

出於某種原因,它仍然打印true上述聲明。關於如何解決這個問題的任何想法?

+2

,直到你已經檢查列表1中的所有元素 – Himanshu

+1

你會uncoditionally返回TRUE;或'FALSE'外循環的第一個迭代你不應該返回true。花一些時間來學習如何使用調試器來遍歷代碼,因爲這會使它比通過閱讀代碼更加明顯。 –

+0

這就是因爲它返回第一個值'1'本身的功能並沒有完成刪除返回True並粘貼在最後 –

回答

0

我認爲這將做在OPS文章中,我們因爲在列表中返回值True列表和檢查都比較1驗證其真實性和return True它不檢查的下一個值7等和功能不繼續執行該列表元素的休息,因爲的return True語句,以便去除,並在兩個循環的結束將將確保檢查True情況下,返回的結果

def reOrder(list1, list2): 
    if len(list1) != len(list2): 
     return False 
    for element1 in list1: 
     foundElement = False 
     for element2 in list2: 
      if element1 ==element2: 
       foundElement=True 
     if foundElement ==False: 
      return False  
    return True 
print(reOrder([1,3,10,8,4,2], [3,1,8,10,2,4])) 
的所有條件後,

OUTPUT

False 

我寧願排序兩個列表,然後檢查作爲複雜性相應的元件將減少到O(N * logn)時間,因爲這代碼顯然是O(N 2)

+0

我看不到你已經改變了原來的功能,並且你沒有提供關於你所做的改變的解釋。 – roganjosh

+0

即時對不起,上述請再次檢查 –

+0

感謝這結束了工作 –

0

的基本思想是,如果這兩個列表具有相同的元素,那麼第二個列表中的每個元素都應該在第一個列表中,反之亦然。意思是即使list2中的一個元素不在list1中,那麼這兩個列表也不相同。

def reOrder(list1,list2): 
Found = False 
if len(list1)!=len(list2): 
    return False 
for e in list2: 
    if e not in list1: 
     return False 
return True  
print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4])) 
相關問題