閑話就不多說了,直接上代碼吧
- 清單解析
v_list = [ "擷取到第 %s 個元素"%i for i in range(10)] print(v_list) // 執行的結果 ['擷取到第 0 個元素', '擷取到第 1 個元素', '擷取到第 2 個元素', '擷取到第 3 個元素', '擷取到第 4 個元素', '擷取到第 5 個元素', '擷取到第 6 個元素', '擷取到第 7 個元素', '擷取到第 8 個元素', '擷取到第 9 個元素']
- 生成器表達式
v_list = ( "擷取到第 %s 個元素"%i for i in range(10)) print(v_list) // 執行的結果 ['擷取到第 0 個元素', '擷取到第 1 個元素', '擷取到第 2 個元素', '擷取到第 3 個元素', '擷取到第 4 個元素', '擷取到第 5 個元素', '擷取到第 6 個元素', '擷取到第 7 個元素', '擷取到第 8 個元素', '擷取到第 9 個元素']
- 總結下:
- 把清單解析的[]換成()達到的就是生成器表達式
- 清單解析與生成器表達式都是一種便利的程式設計方式,隻不過是生成器表達式更節省記憶體
- python不但使用疊代器協定,讓for循環更加通用,大部分内置函數,也是使用疊代器協定通路對象
-
推導式公式
上面我們已經簡單介紹了清單推導式和生成器表達式,除此之外,還有字典推導式,集合推導式等等
下面以清單推導式來介紹通過公式,其他的推導式對于這個公式也是适用的
variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res: 清單生成元素表達式,可以是有傳回值的函數。 for out_exp in input_list: 疊代input_list将out_exp傳入out_exp_res表達式中。 if out_exp == 2: 根據條件過濾哪些值可以。
-
清單推導式
30以内所有能被4整除的數
30以内所有能被3整除的數的平方list = [i for i in range(30) if i % 4 is 0] print(list) //執行結果 [0, 4, 8, 12, 16, 20, 24, 28]
找到嵌套清單中名字含有兩個‘e’的所有名字list = [i ** 2 for i in range(30) if i % 4 is 0] print(list) //執行結果 [0, 16, 64, 144, 256, 400, 576, 784]
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] list = [name for lst in names for name in lst if name.count('e') >= 2] print(list) // 執行的結果 ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
-
字典推導式
将一個字典的key和value對調
param = {"a":10,"b":20} list = {param[key]:key for key in param} print(list) //執行結果 {10: 'a', 20: 'b'}
-
集合推導式
計算清單中每個值的平方,并自帶去重功能
list = {i ** 2 for i in [1,-1,2,-2,8,6,5]} print(list) //執行結果 {64, 1, 4, 36, 25}