2017-03-17 172 views
0

我在互聯網上找到了lambda函數。我正在使用它並正確地獲取輸出。但我需要知道解釋,以便我可以根據需要更改功能。lambda功能解釋

此功能刪除列表中的我有任何重複的數據。但我無法弄清楚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

我同意,它使代碼不可讀通過複雜的lambda表達式。

lambda函數大致相當於以下(含評論),

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功能按順序輸入列表列[「你好」]和累加器[]。

老實說,如果你只是希望擺脫重複的,可以達到同樣只用一行。

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

希望這會有所幫助。

+0

謝謝大家的解釋 –

+0

@HyderTom,如果我的回答是,你在找什麼,不要考慮接受的答案,因爲這將有助於這個問題不是掛在未答覆。 –

+0

我在哪裏做? –

1

我會用set找到列表中的唯一項目。

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

解釋什麼是在這一段代碼發生的事情,關鍵是在reducelambda沒有這麼多。在較高層次上,lambda表示正在進行唯一性檢查,reduce表示將列表中的項目傳遞給lambda函數。

爲了解釋該代碼的拉姆達部分,λ-創建其在這種情況下,正在採取2個輸入,X並將它們傳遞給表達的功能對象,(l.append(x) or l) if x not in l else l加入大括號周圍l.append(X )或l,以便於閱讀,因爲其餘部分只是一個if else語句。

要真正瞭解它是如何工作的,如前面提到的,關鍵是在降低,以及相關的Python文檔做解釋的一個很好的工作。