2017-03-12 22 views
1

arr1とarr2の間に不足している要素を見つけようとしていますが、コードの問題点がわかりません。提案してください。Pythonのループ処理で出力が得られません

def miss2(arr1, arr2): 
    arr3=arr1 
    for i in arr1: 
     # print(i) 
     for j in arr2: 
      # print(i,j) 
      if i == j: 
       arr3.remove(j) 

    print(arr3) 

arr1=[1,2,3,4] 
arr2=[1,2] 

miss2(arr1,arr2) 

結果:Pythonで[2, 3, 4]の代わり[3, 4]

+1

あなたはコピーを作成する必要はありませちょうど新しいリファレンス 'ARR3 = ARR1 [:] '、問題を修正します。 – AChampion

+0

愚かなありがとう – user3752941

答えて

3

オブジェクトは、あなたがarr3arr1の値を代入しませんでした意味参照、によって格納されますが、object.Youへのポインタができますis演算子を使用して、2つのオブジェクトのメモリ内のアドレスが同じかどうかをテストします。

の配列は、あなたがリストをコピーするためにこれを使用することができますスライスしてコピーすることができます。

arr3 = arr1[:] 

また、あなたが

arr3 = list(arr1) 

を使用するかは、(コピーを使用することができます)モジュール:

from copy import copy 
arr3 = copy(arr1) 

ところで、これを試すことができます:

​​
0

McGradyが正しいです。 ここでは、参考文献の問題について詳しく説明しています。ここ Is Python call-by-value or call-by-reference?

そして、あなたは「設定」の代わりに「リスト」のデータ構造(数学の概念を検討する)を使用することができ、:

x = set([1,2,3,4]) 
y = set([1,2]) 
x - y 
関連する問題