2017-03-17 9 views
0

インターネットでラムダ関数が見つかりました。私はそれを使用して、出力を正しく取得しています。しかし、私は私の要件に機能を変更することができるように説明を知る必要があります。ラムダ関数の説明

この機能は、私が持っているリスト内の反復データを削除します。しかし、私はL値とX値がどうなっているのか理解できません。また、l.append(x)やlは何をしますか?どの状態でそれを選ぶでしょうか。説明してください。私たちは列[ "こんにちは"] [1,1,2,3,4,5,6,6,7,8,9,9,10,0]

repeating_data = reduce(lambda l, x: 
          l.append(x) or l if x not in l else l, 
          columns['Hello'], []) 

おかげ ロッキーを持っていると仮定しましょう

+5

これはかなり悪い*コードです。私はそれをすべて捨てるだけです。機能的な構造物の内部の変異状態は、ノー・ノーである。多項式のランタイムの複雑さによって、非常に非効率的であることも起こります。 –

+1

万が一 'pandas'データフレームを使用していますか? –

答えて

1

私は、複雑なラムダ関数によってそのコードを読むことができないことに同意します。

ラムダ関数は、以下とほぼ同じである(コメント付き)、

def ext_function(columns['Hello']): 
    #Empty list to accumulate values 
    l = [] 
    #Iterate through column 
    for x in columns['Hello']:   
     #if col_value not in l , append 
     if x not in l: 
      l.append(x) 
    return l 

そしてreduce関数は、[] [「ハロー」]入力リスト欄に順次lambda関数を適用し、アキュムレータれます。

正直言って、重複を取り除こうとしているのであれば、1行で同じことを達成できます。

l = list(set(Columns["Hello"])) 

これが役に立ちます。

+0

説明をありがとうございました –

+0

@HyderTom、私の回答があなたが探しているものなら、この質問が答えられないように役立つので、答えを受け入れることを検討してください。 –

+0

どこでそれをするのですか? –

1

setを使用して、リスト内の一意のアイテムを検索します。

unique_items = list(set(columns["Hello"])) 

コードのその部分で何が起こっているのかを説明するために、トリックはlambdaにそんなにreduceでありません。高いレベルでは、ラムダは一意性チェックを行い、リストからラムダ関数にアイテムを渡すことを減らしています。

そのコードのラムダ一部を説明するために、ラムダは、(l.append(x) or l) if x not in l else lがl.append周りに括弧を追加し、その場合には2つの入力、Lを取っているとXおよび発現に渡す関数オブジェクトを作成する(X )またはl、読みやすくするために、残りは単にelse文です。

実際にどのように動作しているかを理解するには、前述したように、トリックは軽減されており、リンクされたPythonのドキュメントはそれを説明するうえで非常に役立ちます。