第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

列表理解與lambda+過濾器

列表理解與lambda+過濾器

慕勒3428872 2019-06-24 14:54:36
列表理解與lambda+過濾器我碰巧發(fā)現(xiàn)自己有一個基本的過濾需求:我有一個列表,我必須通過條目的一個屬性來過濾它。我的代碼看起來如下:my_list = [x for x in my_list if x.attribute == value]但后來我想,這樣寫不是更好嗎?my_list = filter(lambda x: x.attribute == value, my_list)它更具可讀性,如果性能需要,可以取出lambda以獲得一些信息。問題是:使用第二種方式是否有任何警告?表現(xiàn)有什么不同嗎?我是否完全忽略了PythonicWay?,并且應(yīng)該以另一種方式來實現(xiàn)它(例如使用itemgetter而不是lambda)?
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗 獲得超6個贊

奇怪的是,不同的人有多大的美。我覺得清單上的理解比filter+lambda但只要你覺得更容易就用吧。但是,不要再給出已經(jīng)用于內(nèi)置的變量名了,這是令人困惑的。[最初使用的問題list作為變量名,但根據(jù)此答案進(jìn)行了更新。]

有兩件事可能會減慢您對filter.

第一個是函數(shù)調(diào)用開銷:一旦您使用Python函數(shù)(不管是由deflambda)過濾器可能會比列表理解慢。幾乎可以肯定,這還不夠重要,在您對代碼進(jìn)行計時并發(fā)現(xiàn)它是一個瓶頸之前,您不應(yīng)該過多地考慮性能問題,但差別就在這里。

可能出現(xiàn)的另一個開銷是lambda被迫訪問一個作用域變量(value)。這比訪問局部變量要慢,在Python2.x中,列表理解只訪問局部變量。如果您使用Python3.x,列表理解將在一個單獨的函數(shù)中運行,因此它也將訪問value通過一個閉包,這個差別就不適用了。

要考慮的另一種選擇是使用生成器而不是列表理解:

def filterbyvalue(seq, value):
   for el in seq:
       if el.attribute==value: yield el

然后,在您的主要代碼中(這是可讀性真正重要的地方),您已經(jīng)用一個有希望有意義的函數(shù)名替換了列表理解和篩選。


查看完整回答
反對 回復(fù) 2019-06-24
  • 3 回答
  • 0 關(guān)注
  • 528 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號