一行就寫完 For 迴圈 - Python 列表推導式
近期因為要趕畢業, 大量參考前人大佬的 CODE,出現一堆列表推導式, 加上 co-worker 學弟有資策會背景,對接的時候他也寫列表推導式, 所以要學怎麼寫列表推導式,並留個紀錄。 先來看一個簡單的例子: [expr0 for i in iterable if expr1] 這種列表推導式等效於: for i in iterable: if (expr1): expr0 超棒 想要進階拓展 N 層迴圈? [expr0 for i in iterable for j in iterable if expr1] 沒問題,這種表達式等效於: for i in iterable: for j in iterable: if (expr1): expr0 N 層迴圈也沒問題! 準備好面對真正的難題了嗎? query, key, value = [l(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2).contiguous() \ for l, x in zip(self.linears, (query, key, value))] 哇靠這在寫三小? 先讓我們簡化一下程式碼: 把: l(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2).contiguous() 改成: l(x) 既然 self.linears 是某種包好的函式,替換成: fs(x) 所以程式被我們簡化成: query, key, value = [l(x) for l, x in zip(fs, (query, key, value))] 讓資料從列表推導式跑過一次: def f(x): a = x[0]*x[0] b = x[1]*x[1] ...