2016-09-19 3 views
3

私はPythonには新しく、私の機能について助言したいと思います。私がやりたいことは以下の通りです。Python-複数のリストから比類のない値を見つけよう

私は2つのリストAとBを持っています(例えば、A = [1,2,3,4,5]、B = [4,3,2,1])値を見つける関数を作成したいこの場合は5.

私は以下の関数を書いたが、うまくいかず、コードの何が間違っているのか分からなかった。だれでも助けてくれただろうバグは何ですか?それは簡単だが、私にとっては難しい。ご協力ありがとうございました!!

def finder(arr1,arr2): 
    arr1 = sorted(arr1) 
    arr2 = sorted(arr2) 

    eliminated = [] 

    for x in arr1: 
     if x not in arr2: 
      eliminated = eliminated.append(x) 
     else: 
      pass 
    return eliminated 
+0

この 'eliminated.appendに変更し、この'排除= eliminated.append(X) '(x)は ' – idjaw

+0

また:http://stackoverflow.com/questions/642763/python-intersection-of- 2つのリスト –

+0

'frozenset(a) - frozenset(b)' - これは、イテラブルとして使用できる不変のセットを生成します。副作用は、 'a'または' b'の複製が存在しないか、順序が保持されることになります。 –

答えて

3

.append()メソッドは元のリストを変更します。また、あなたのリストをソートする必要はありません

eliminated.append(x) 

に次の行

eliminated = eliminated.append(x) 

を変更します。

+0

ありがとう!あなたが言いましたように私のコードを変更しました。しかし、まだ機能していません。それは何も返しません...どんな考えですか? – yusuke0426

+1

@ yusuke0426ほとんどの場合、メソッド呼び出しの戻り値は表示されません。メソッドを呼び出すだけでは何も出力されません。あなたはあなたの結果を返す*ですが、実際に何も印刷していません。あなたのメソッドコールの周りのプリントを呼び出すだけです – idjaw

+0

@ yusuke0426私のためにうまく動作します:https://repl.it/Dc1p – Selcuk

3

ここには3つの異なる方法があります。最初の方法はセット差を使用し、2番目は組み込みフィルター機能を使用し、3番目はリストの理解を使用します。

Python 2.7.12 (default, Jul 9 2016, 12:50:33) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> A=[1,2,3,4,5] 
>>> B=[4,3,2,1] 
>>> def a(x,y): 
... return list(set(x)-set(y)) 
... 
>>> a(A,B) 
[5] 
>>> def b(x,y): 
... return filter(lambda A: A not in y, x) 
... 
>>> b(A,B) 
[5] 
>>> def c(x,y): 
... return [_ for _ in x if _ not in y] 
... 
>>> c(A,B) 
[5] 
+1

あなたの最初の手法(正しく)は、交差点を設定するのではなく、差異を使用します。 – smarx

+1

ああ申し訳ありませんが、テレビを見て、同時にスタックオーバーフローに関する質問に答える。頭がおかげでありがとう、私はそれを修正します。 –

関連する問題