列表解析是用緊湊的方式來構造列表,起源於數學集合符號。一旦使用列表解析后,會經常使用它們來創建可讀性強、緊湊的代碼,而且這些語句執行速度也較快,效率較高。
列表解析至少需要包含兩個部分,但一般包含三個部分:【expression for-clause condition】
比如:要得到0~20的偶數列表,先用range來生成0~20的數字,然后檢查是否為偶數(i%2==0),最后將每個滿足條件的元素手機到列表中。
1 >>> [i for i in range(21) if i%2 == 0] 2 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
當然,並不僅限於數字,比如,找到單詞中所包含的元音列表
1 >>> word = "solidarity" 2 >>> vowels = "aeiou" 3 >>> [i for i in word if i in vowels] 4 ['o', 'i', 'a', 'i']
還可以從多個序列中,采用復雜條件來得到列表。例如,假設要生成數字對(笛卡爾坐標對),x在0~3,y在0~4,且x>y。通過限制x為偶數可以進一步限制數字對。
1 >>> [(x,y) for x in range(3) for y in range(4) if x > y] 2 [(1, 0), (2, 0), (2, 1)] 3 >>> [(x,y) for x in range(3) for y in range(4) if x > y and x%2 == 0] 4 [(2, 0), (2, 1)]
列表解析還能用於轉換,比如,對於包含字母和數字的字符串,希望得到只有數字的列表,需要過濾掉所有非數字的字符,並將字符數字轉換為整數。
1 >>> string="John Doe,874 Main St.,East Lansing,MI,48823" 2 >>> [int(c) for c in string if c.isdigit()] 3 [8, 7, 4, 4, 8, 8, 2, 3]
列表解析的完整規則是表達式后跟for語句,然后跟多個if 或者for從句或者無。