2016-08-17 8 views
4

私はcodecademyでPythonをlearingと番号のリストから重複を削除するためのものだ機能のために、このソリューションに出くわしたんだ:これは動作しますがなぜですか?

x = [1, 1, 2, 2] 

def remove_duplicates(x): 
    p = [] 
    for i in x: 
     if i != i: 
      p.append(i) 
    return i 

私はいくつかのprint文でpycharmでこれを実行し、ちょうど空のリストを得ました。私は私の頭の中でこれを行うとき、それは意味をなさないので、私は奇妙なことですが、codecademyは答えとしてこれを受け入れます。それは単なるうずまきですか?それとも私はまだ理解していないレベルですか?

+2

これは、 'p'を返すとNaNをフィルタリングするためだけに使用できます。それ以外の場合は意味がありません。 – karakfa

+0

私にも意味がありません。 – technico

+0

私の頭も傷つきました。 – Eduard

答えて

4

あなたは正しいです。意味がありません。まず、pという名前のリストを作成し、それ自身と等しくない各アイテムを取得します。私が知っている唯一のオブジェクトはNaNですが、それ以外のオブジェクトはありません。だからpは空のリストです。しかし、pを定義することは、返されないので役に立たない。返されるのはiで、最後の各項目に割り当てられているため、関数の最後までリストの最後の項目です。要するに、その機能がこれに相当します

def remove_duplicates(x): 
    return x[-1] 

私は、関数が返すことになっているものを聞いていないが、おそらく非重複するアイテムの数を返すことになっています。そうであれば、リスト内の最後の項目は重複していない項目の数であるため、単に機能します。

+0

リストが空の場合でもエラーをスローします。 x [-1]と同じ*エラーではありません。 – jpmc26

+0

私の疑惑を確認してくれてありがとう、zondo。 –

+0

@ jpmc26:真、 'NameError'です。私は、おおよそ同等のことを言わなければならないと思います。 – zondo

2

が重複を除去するためのニシキヘビの方法(good_result)を参照すると、また、あなたのコードはどんな意味がない理由を理解することは、このスニペットを見てみましょう:

x = [1, 1, 2, 2] 


def remove_duplicates(x): 
    p = [] 
    for i in x: 
     if i != i: 
      p.append(i) 
    return i 

good_result = list(set(x)) 
print good_result 
print remove_duplicates(x) 

あなたが見ることができるように、あなたの関数でありますフィルタリングされたリストを重複値なしで返さない場合は、リストの最後の要素(index = -1)を返すだけです。ですから、codeacademyはそのスニペットを確かに質問how to remove duplicateds from a listに有効な答えとして受け入れるべきではありません。

実際に質問していたcodeacademyがthe number of unique values from a listであると仮定した場合、破損したコードが正しい回答を返します。これはlen(good_result)と同じです。それはちょうどそれはそれはない

return x[-1] 

と同じで、番号の最後の要素を返し、それはあなたのコードが正しいことを意味するものではありません:)

+0

あなたのソリューションは、私が見た多くのものと似ています。その男がそれで何を考えていたのか、それがなぜ答えとして受け入れられるのかはっきりしない。 –

+0

@ThomasCho私もいません...私は私のコメントを編集しました。なぜ私はcodeacademyが間違った答えを正しいとしたのか – BPL

1

あなたのコードだけ言って運によってだけで働いていましたリストを返す。 あなたが質問しているかもしれない質問をチェックする必要があると思います。

a)リスト内の複製要素の1つを返す関数。

b)リスト内の要素を複製する機能を返す関数。

あなたの答えは2です、運が正解です。

関連する問題