2017-11-11 22 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])) 

。どのように私はこれを修正することができるかに関する任意のアイデア?私はこれがのOPでそれを行うだろうと思う

+2

あなたはuncoditionally外側のループの最初の繰り返しで 'true'にもしくは' false'のを返します – Himanshu

+1

あなたはリスト1のすべての要素を確認するまでは、trueを返すべきではありません。デバッガを使用してコードをステップ実行する方法を学ぶには時間をかけてください。単純にコードを読むだけでははるかに明白になります。 –

+0

それは最初の値 '1'自体を返すので、関数は完了しません。戻りTrueを取り除き、最後に貼り付けます –

答えて

0

は、私たちがあるため、リスト内の値Trueを返し、リストをチェック両方で1を比較し、その真実とreturn Trueが、それは次の値7などと機能をチェックしません検証投稿しますreturn True文はように削除し、2つのループの終わりに置くことを確保するため、リスト要素の残りの部分を実行し続けないこと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 

iが(N * LOGN)このコードとしては(N2)O明らかであるOに減少させるであろう複雑として対応する要素を確認し、2つのリストをソートし、希望は

+0

元のものからどのような機能を変更したのか分かりません。 。 – roganjosh

+0

上記のplsの再確認のために申し訳ありません –

+0

ありがとうこれは仕事を終えた –

0

基本的な考え方である場合に2つのリストは同じ要素を持ち、2つ目のリストのすべての要素は最初のリストになければならず、その逆もあります。意味は、list2の1つの要素がlist1にない場合、2つのリストは同じではありません。

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])) 
関連する問題