Python中的列表推導(List Comprehension)

    列表推導(List Comprehension)是在一些編程語言中存在的一種語法,目的是從一個存在的列表創建另一個列表。最便於理解這種語法的方法是來看看它的來源——集合的構建式表示法。請看以下的集合表達式:


其中的N是自然數集合,則集合S是由平方大於3的自然數乘以2組成的,這其中N是已存在的集合,x平方大於3是過濾條件,而2乘以x是產生新元素的表達式。下面來看一下Python中列表推導的語法:

[myExpression for myVar in myList if myPredicateExpression]

是否看得出來和集合的構建表達式很像?其中myList式已存在的列表,myPredicateExpression是過濾條件,而myExpression是產生新元素的表達式,if myPredicateExpression是可選項。來看兩個簡單的例子:

In [14]: [x for x in ["a", "b", "c"]]
Out[14]: ['a', 'b', 'c']

In [15]: [x**3 for x in range(10) if x%2==1]
Out[15]: [1, 27, 125, 343, 729]

靈活使用列表推導以後,可以顯著簡化一些代碼,請看以下一些例子:

例1:從一個英文文件中讀入所有的行並分詞

with open('file.txt') as f:
    words = [l.strip().split(" ") for l in f.readlines() if len(l.strip()) > 0]

執行後將生成一個二維數組,內層數組的元素爲分好的單詞

例2:Jewels and Stones問題

class Solution:
    def numJewelsInStones(self, J, S):
        setJ = set(J)
        return sum(c in setJ for c in S)

參考資料

https://en.wikipedia.org/wiki/List_comprehension

https://leetcode.com/problems/jewels-and-stones/description/

https://www.oschina.net/translate/list_comprehension?lang=eng

https://stackoverflow.com/questions/3277503/in-python-how-do-i-read-a-file-line-by-line-into-a-list

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章