【Python基础】Python 炫技操作:推导式的五种写法
作者:寫代碼的明哥
來源:Python編程時光
推導式(英文名:comprehensions),也叫解析式,是Python的一種獨有特性。
推導式是可以從一個數據序列構建另一個新的數據序列的結構體。
總共有四種推導式:
列表(list)推導式
字典(dict)推導式
集合(set)推導式
生成器推導式
1. 列表推導式
列表推導式的基本格式
new_list?=?[expression?for_loop_expression?if?condition]舉個例子。
我想找出一個數值列表中為偶數的元素,并組成新列表,通常不用列表推導式,可以這么寫
old_list?=?[0,1,2,3,4,5]new_list?=?[] for?item?in?old_list:if?item?%?2?==?0:new_list.append(item)print(new_list)?#?output:?[0,?2,?4]一個簡單的功能,寫的代碼倒是不少。
如果使用了列表推導式,那就簡潔多了,而且代碼還變得更加易讀了。
>>>?old_list?=?[0,1,2,3,4,5] >>> >>>?new_list?=?[item?for?item?in?old_list?if?item?%?2?==?0] >>>?print(new_list)?#?output:?[0,?2,?4] [0,?2,?4]2. 字典推導式
字典推導式的基本格式,和 列表推導式相似,只是把 [] 改成了 {},并且組成元素有兩個:key 和 value,要用 key_expr: value_expr 表示。
new_dict?={?key_expr:?value_expr?for_loop_expression?if?condition?}舉個例子。
我想從一個包含所有學生成績信息的字典中,找出數學考滿分的同學。
old_student_score_info?=?{"Jack":?{"chinese":?87,"math":?92,"english":?78},"Tom":?{"chinese":?92,"math":?100,"english":?89} }new_student_score_info?=?{name:?scores?for?name,?scores?in?old_student_score_info.items()?if?scores["math"]?==?100} print(new_student_score_info) #?output:?{'Tom':?{'chinese':?92,?'math':?100,?'english':?89}}3. 集合推導式
集合推導式跟列表推導式也是類似的。唯一的區別在于它使用大括號{},組成元素也只要一個。
基本格式
new_set?=?{?expr?for_loop_expression?if?condition?}舉個例子
我想把一個數值列表里的數進行去重處理
>>>?old_list?=?[0,0,0,1,2,3] >>> >>>?new_set?=?{item?for?item?in?old_list} >>>?print(new_set) {0,?1,?2,?3}4. 生成器推導式
生成器推導式跟列表推導式,非常的像,只是把 [] 換成了 ()
列表推導式:生成的是新的列表
生成器推導式:生成的是一個生成器
直接上案例了,找出一個數值列表中所有的偶數
>>>?old_list?=?[0,1,2,3,4,5] >>>?new_list?=?(item?for?item?in?old_list?if?item?%?2?==?0) >>>?new_list <generator?object?<genexpr>?at?0x10292df10> >>>?next(new_list) 0 >>>?next(new_list) 25. 嵌套推導式
for 循環可以有兩層,甚至更多層,同樣的,上面所有的推導式,其實都可以寫成嵌套的多層推導式。
但建議最多嵌套兩層,最多的話,代碼就會變得非常難以理解。
舉個例子。
我想打印一個乘法表,使用兩個for可以這樣寫
for?i?in?range(1,?10):for?j?in?range(1,?i+1):print('{}x{}={}\t'.format(j,?i,?i*j),?end='')print("")輸出如下
1x1=1???? 1x2=2????2x2=4??? 1x3=3????2x3=6???3x3=9??? 1x4=4????2x4=8???3x4=12??4x4=16?? 1x5=5????2x5=10??3x5=15??4x5=20??5x5=25?? 1x6=6????2x6=12??3x6=18??4x6=24??5x6=30??6x6=36?? 1x7=7????2x7=14??3x7=21??4x7=28??5x7=35??6x7=42??7x7=49?? 1x8=8????2x8=16??3x8=24??4x8=32??5x8=40??6x8=48??7x8=56??8x8=64?? 1x9=9????2x9=18??3x9=27??4x9=36??5x9=45??6x9=54??7x9=63??8x9=72??9x9=81如果使用嵌套的列表推導式,可以這么寫
>>>?print('\n'.join(['?'.join(['%2d?*%2d?=?%2d'?%?(col,?row,?col?*?row)?for?col?in?range(1,?row?+?1)])?for?row?in?range(1,?10)]))1?*?1?=??11?*?2?=??2??2?*?2?=??41?*?3?=??3??2?*?3?=??6??3?*?3?=??91?*?4?=??4??2?*?4?=??8??3?*?4?=?12??4?*?4?=?161?*?5?=??5??2?*?5?=?10??3?*?5?=?15??4?*?5?=?20??5?*?5?=?251?*?6?=??6??2?*?6?=?12??3?*?6?=?18??4?*?6?=?24??5?*?6?=?30??6?*?6?=?361?*?7?=??7??2?*?7?=?14??3?*?7?=?21??4?*?7?=?28??5?*?7?=?35??6?*?7?=?42??7?*?7?=?491?*?8?=??8??2?*?8?=?16??3?*?8?=?24??4?*?8?=?32??5?*?8?=?40??6?*?8?=?48??7?*?8?=?56??8?*?8?=?641?*?9?=??9??2?*?9?=?18??3?*?9?=?27??4?*?9?=?36??5?*?9?=?45??6?*?9?=?54??7?*?9?=?63??8?*?9?=?72??9?*?9?=?81 往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站qq群704220115,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【Python基础】Python 炫技操作:推导式的五种写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows7自带录制屏幕怎么用
- 下一篇: 火狐浏览器怎么关闭自动更新 火狐浏览器关