Python One-Liners讀書及理解(1)

首發(fā)于同名公眾號:車灣里

英語不能白學(xué)具篇,開始試著啃英文版書籍拳氢。

這本是2020年4月份新鮮出爐的,邊看邊查查詞典蛋铆,還是闊以看懂馋评。

書的第一章是回顧基本知識,如:數(shù)據(jù)類型刺啦,邏輯判斷留特,循環(huán),函數(shù)玛瘸,lambda表達式等蜕青;

從第二章開始作者每章分享10個左右的ONE-LINER代碼,并進行講解糊渊。

這篇就分享書里面第二章提到的一些 ONE-LINER右核,也就是一行代碼搞定小任務(wù)。

CODE 1:

employees是由姓名和薪水組成的字典數(shù)據(jù)渺绒,在employees這個dict中找到薪水大于100000的數(shù)據(jù)贺喝。

employees = {'Alice':100000,'Bob':99817,'Carol':122908,"Frank":88123,'Eve':93121}
## One-Liner
top_earners1 = [(k,v) for k,v in employees.items() if v>=100000]
## Result
print(top_earners1 )
##?[('Alice',?100000),?('Carol',?122908)]

理解:

通過字典的 .items() 得到一個可以遍歷的(鍵, 值) 元組數(shù)組,然后通過 for 循環(huán)遍歷這個元組數(shù)組宗兼,當(dāng)值大于 100000 時搜变,通過List Comprehension的方式 append 這個 (k, v) 元組tuple到返回的 List 中。

List Comprehension 是 Python 內(nèi)置的強大的生成List的方法针炉。書里面提到挠他,理解 List Comprehension 可以用一個簡單的公式:

[expression + context]

expression,直譯為表達式篡帕,用于定義怎么加工返回 List 中的每個元素殖侵。比如這里,每個元素的表達式就是 (k, v)镰烧,即滿足條件的一個元組拢军。

context,直譯為上下文怔鳖,用于定義數(shù)據(jù)源 List 中的哪些元素被選中茉唉。比如這里,是循環(huán)employees中的每個元素结执,找到那些值大于 100000 的元組數(shù)據(jù)度陆。

知識點:

1. list?Comprehension

廖老師網(wǎng)站里面翻譯為列表生成式:

https://www.liaoxuefeng.com/wiki/1016959663602400/1017317609699776

Crossin老師網(wǎng)站里面翻譯的是列表解析:

https://python666.cn/cls/lesson/66/

2. Dict 及 Dict 的 items() 方法:

https://python666.cn/cls/lesson/38/

https://www.runoob.com/python/att-dictionary-items.html

3.元組 tuple

https://python666.cn/cls/lesson/53/

4. for 循環(huán)

https://python666.cn/cls/lesson/13/

5.?if?判斷

https://python666.cn/cls/lesson/8/

CODE 2:

在一個字符串組成的數(shù)組中,給定一個關(guān)鍵字献幔,輸出一個 tuple 組成的數(shù)組懂傀,標(biāo)記關(guān)鍵字是否存在于數(shù)組元素的字符串中。

比如蜡感,字符串?dāng)?shù)組如下:?

txt?=['lambda?functions?are?anonymous?functions.',      'anonymous functions dont have a name',      'functions are objects in Python']

給定的關(guān)鍵字為:anonymous

輸出的結(jié)果如下:

#?輸出結(jié)果蹬蚁,tuple組成的數(shù)組:[(True, 'lambda functions are anonymous functions.'), (True, 'anonymous functions dont have a name'), (False, 'functions are objects in Python')]

One-Liner代碼

## One-Liner
mark = map(lambda s:(True,s) if 'anonymous' in s else (False,s),txt)
## 輸出結(jié)果
print(list(mark))

理解:

這個 One-Liner 綜合了 map() 和 lambda 表達式恃泪,循環(huán) txt 字符串?dāng)?shù)組,通過 in 運算符犀斋,判斷字符串是存在數(shù)組的每個元素s中:

如果存在就組成?(True, s)贝乎,不存在就組成?(False, s)?

然后通過 lambda 表達式返回一個可以迭代的對象?Iterator

Python 的三元運算,A if B else C 即符合條件 B 則返回 A叽粹,否則返回 C览效;

lambda?表達式,是一個匿名函數(shù)球榆,不需要用def關(guān)鍵字來定義朽肥,并且只用一次,用完即走持钉。

語法是:lambda <arguments> : <return expression>

首先需要 lambda 關(guān)鍵字衡招,arguments 可以有多個參數(shù),多個參數(shù)用英文逗號隔開每强,return expression 返回表達式可以是任何表達式始腾,也可以是函數(shù);

map() 是高階函數(shù)空执,接收一個函數(shù)浪箭,和一個序列(數(shù)組),然后把這個函數(shù)應(yīng)用到序列的每一個元素上辨绊。

這里 map 接受的是 lambda 函數(shù)和字符串?dāng)?shù)組奶栖,然后將字符串?dāng)?shù)組中每一個元素都用 lambda 函數(shù)來判斷是否包含關(guān)鍵字,然后返回 tuple 組成的?Iterator门坷,最后通過 list()?轉(zhuǎn)成數(shù)組輸出宣鄙。

知識點:

1.Map函數(shù)

https://python666.cn/cls/lesson/72/

2.lambda表達式

https://python666.cn/cls/lesson/70/

3.Python的三目運算寫法

https://www.cnblogs.com/xiexiaoxiao/p/7772441.html

4.字符串的成員運算符 in

https://www.runoob.com/python/python-strings.html

另外書里面還有綜合運用切片、ZIP函數(shù)默蚌、生成器/迭代器等寫成的一行代碼冻晤。

由于篇(BU)幅(XIANG)限(XIE)制(LE),可以后臺回復(fù)ONE2绸吸,我把第二章的代碼摘下了鼻弧。

如果要這本書的英文版(epub格式),回復(fù) ONE-BOOK锦茁。

謝謝您的閱讀攘轩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜻势,隨后出現(xiàn)的幾起案子撑刺,更是在濱河造成了極大的恐慌,老刑警劉巖握玛,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件够傍,死亡現(xiàn)場離奇詭異,居然都是意外死亡挠铲,警方通過查閱死者的電腦和手機冕屯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拂苹,“玉大人安聘,你說我怎么就攤上這事∑鞍簦” “怎么了浴韭?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脯宿。 經(jīng)常有香客問我念颈,道長,這世上最難降的妖魔是什么连霉? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任榴芳,我火速辦了婚禮,結(jié)果婚禮上跺撼,老公的妹妹穿的比我還像新娘窟感。我一直安慰自己,他們只是感情好歉井,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布柿祈。 她就那樣靜靜地躺著,像睡著了一般哩至。 火紅的嫁衣襯著肌膚如雪躏嚎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天憨募,我揣著相機與錄音紧索,去河邊找鬼。 笑死菜谣,一個胖子當(dāng)著我的面吹牛珠漂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尾膊,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼媳危,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冈敛?” 一聲冷哼從身側(cè)響起待笑,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抓谴,沒想到半個月后暮蹂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寞缝,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年仰泻,在試婚紗的時候發(fā)現(xiàn)自己被綠了荆陆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡集侯,死狀恐怖被啼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棠枉,我是刑警寧澤浓体,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站辈讶,受9級特大地震影響命浴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荞估,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一咳促、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勘伺,春花似錦跪腹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缅帘,卻和暖如春轴术,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钦无。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工逗栽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人失暂。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓彼宠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親弟塞。 傳聞我的和親對象是個殘疾皇子凭峡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348