Re: [問題] 如何去除迴圈後多餘的東西

作者: TuCH (謬客)   2019-12-05 15:02:14
講解一下 list comprehension
res = [i.get("name") for i in a]
等同於
res = []
for i in a:
temp = i.get("name")
res.append(temp)
其實就是map的機制
任何可以 iteration 的東西 可以使用這個機制做一些處理
例如說 [f"Hello, {i}" for i in ["Jack", "Mary"]]
除了map 還可以做filter
# 輸出100以內的偶數
[i for i in range(100) if i%2==0]
# 輸出字串裡面有Doctor的字串
[i for i in ["Doctor X","Doctor Y", "teacher"] if "Doctor" in i]
再來更多變化
# 輸出100以內的偶數 並且如果小於50的值都設為0
[i if i > 50 else 0 for i in range(100) if i%2==0]
# 99乘法表
[f"{i}X{j}={i*j}" for i in range(1,10) for j in range(1,10)]
作者: cuteSquirrel (松鼠)   2019-12-05 19:18:00
推 list comprehension
作者: k12795 (遠遠)   2019-12-06 04:19:00
倒數第二個可以講解一下邏輯順序嗎 越想越亂
作者: s4028600 (佑)   2019-12-06 04:43:00
我想應該是將1到100 loop到i 然後條件1 i餘數等於0條件2 i>50 不然就打印0
作者: k12795 (遠遠)   2019-12-06 05:05:00
主要是好奇if else for 擺放位置的差別
作者: ddavid (謊言接線生)   2019-12-06 18:29:00
樓上,if else跟for沒有相關性,要分開看a if b else c近似為C++裡面的b ? a : c(注意順序)b成立的話就a,否則就c那一行難懂是因為必須要知道語法parse的優先順序,如果能加上括號就會比較好讀了我個人寫到這些多個邏輯式、運算子或語法互套的情況都習慣很詳盡加括號表示解讀順序,不然有時自己回頭看都會花掉XD
作者: k12795 (遠遠)   2019-12-06 20:12:00
真的不知道從那邊開始判讀*哪

Links booklink

Contact Us: admin [ a t ] ucptt.com