首發(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]
## Resul
t
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锦茁。
謝謝您的閱讀攘轩。