2016-11-02 7 views
-5

すべてが正の整数を含む2つの配列が表示されます。アレイの1つは、1つの余分数を持つことになり、以下を参照:IndexError:範囲外のリストインデックス - arr1およびarr2のiの場合

def find_missing(arr1, arr2): 
    if len(arr1) != len(arr2): 
    for i in arr1 and arr2: 
     if arr1[i] != arr2[i]: 
      return i 

が生産しているこの:

[1,2,3][1,2,3,4]77

私のコードを返す必要があります4

[4,66,7][66,77,7,4]を返す必要がありますエラー:

Traceback (most recent call last): File "python", line 1, 
in <module> File "python", line 4, in find_missing 
IndexError: list index out of range 
+0

「私はarr1とarr2のために」とは思いません。 'と'は引数の1つ(この場合は2番目のもの)を返すことで短絡するので、2番目のリストの値を繰り返し処理します。索引ではなく、 'i'をどのように使用しているのかです。 – Blckknght

+0

両方のリストは同じサイズで、完全に異なる値を持つことができるので、 'len(arr1)!= len(arr2)'はジョブも... – wiltomap

+4

OPは基本的なPythonで 'for 'は完全に間違っています(コードのロジックも同様です)。やや関連性があります:リストのすべての要素が一意であれば、これは1行で( 'set'sを使って)解決できます。 – UnholySheep

答えて

1

これはそれを行うための一つの方法が考えられます。

def find_missing(arr1, arr2): 

    # Set longer array to lst1, shorter to lst2 
    if len(arr1) > len(arr2): 
     lst1 = arr1 
     lst2 = arr2 
    else: 
     lst1 = arr2 
     lst2 = arr1 

    # Go through elements in longer list 
    for element in lst1: 

     # If this element is not in lst2, we found it, return result 
     if element not in lst2: 
      return element 
+0

この作品はありがとうございますFejs –

1

あなたのコードは、あなたが意味することを実行していないようです - 別の問題です。

エラーはここにある:

for i in arr1 and arr2: 
    if arr1[i] != arr2[i]: 

iはARR1でan indexではなく、直接its element。 (。配列のLength4かもしれないが、その中の要素が66でもよい)

ソリューションは、このような単純なことがあります

def find_missing(arr1, arr2): 
    diff = [i for i in arr1 if i not in arr2] + [i for i in arr2 if i not in arr1] 
    return diff[0] if len(diff) > 0 else None 
+0

がテストされ、動作します。 –

+0

私は単純な' diff' **リスト**)を、 'それの最初の要素 'を返す式(または違いがない場合は特別な値' None')に置き換えます - あなたの要求に従います。 – MarianD

0
def find_missing(list1, list2): 
    try:   
     if len(list1) > len(list2): 
      return [element for element in list1 if element not in list2][0] 
     else: 
      return [element for element in list2 if element not in list1][0] 
    except IndexError: 
     return None 
+0

私はあなたの返信をreplでテストしました。 –

+0

**差がない場合はエラーが発生します** **空リスト**から要素[0]を取得することはできません。 – MarianD

+0

名前エラーは実際にあなたのコード*から**機能の定義の** ** - (リストの1つに余分な番号がある)違いがあれば正常に動作します。 – MarianD

関連する問題