Python中存在一種特殊的表達式,名為推導式,它的作用是將一種數(shù)據(jù)結構作為輸入,再經過過濾計算等處理,最后輸出另一種數(shù)據(jù)結構。根據(jù)數(shù)據(jù)結構的不同會被分為列表推導式、集合推導式和字典推導式。我們先著重來介紹最常使用的列表推導式。
我們先看一下列表推導式的語法格式:
listname = [expression for variable in 對象(if condition)]
listname:新生成的列表名字。
expression:表達式。
variable:變量名。
(if condition):用于從對象中選擇符合要求的列表。
我們分別從規(guī)定范圍的數(shù)值列表、規(guī)定條件的列表和符合條件元素組成的列表三個方面講起。
1. 規(guī)定范圍的數(shù)值列表
我們先思考一下當我們需要生成10個數(shù)字并存放列表當中,我們先看一下普通方式:
listname = [] for i in range(10): listname.append(i) print(listname)
輸出結果為:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
而使用列表推導式只需要一行就可以:
listname = [i for i in range(10)]
輸出結果為:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
這種方式能簡化我們在定義列表時的操作。
2. 根據(jù)規(guī)定條件生成列表
假定我們已知一個列表為 listname = [1,3,5,6,7,9,10,23,26,28,64,98],我們要找到其把里面的數(shù)全部加5,普通方法:
listname = [1,3,5,6,7,9,10,23,26,28,64,98] for i in range(len(listname)): listname[i] += 5 print(listname)
輸出結果為:
[6, 8, 10, 11, 12, 14, 15, 28, 31, 33, 69, 103]
而使用列表推導式同樣很簡潔:
listname = [1,3,5,6,7,9,10,23,26,28,64,98] listname = [ i + 5 for i in listname]
輸出:
[6, 8, 10, 11, 12, 14, 15, 28, 31, 33, 69, 103]
3. 符合條件的元素組成的列表
這種類型的列表推導式要比前兩種復雜點,但是能簡化更多的代碼。
我們先舉個列子來看一下代碼格式:
已知一個列表為listname = [8,33,53,64,73,95,101,123,126,164,198],然后我們要找到列表中小于大于100的數(shù)字,然后乘上0.8,最后返回到列表中。
如果我們使用普通方法:
listname = [10,20,30,40,60,120,130,140,160,180,200] newlist = []#創(chuàng)建新列表來存儲 for i in range(len(listname)):#索引值遍歷 if listname[i] >100:#找到大于100的數(shù) listname[i] *= 0.8#乘上0.8 newlist.append(listname[i])#添加到新列表中 print(newlist)
輸出結果為:
[96.0, 104.0, 112.0, 128.0, 144.0, 160.0]
使用列表推導式:
listname = [10,20,30,40,60,120,130,140,160,180,200] newlist = [i*0.8 for i in listname if i > 100] print(newlist)
輸出結果:
[96.0, 104.0, 112.0, 128.0, 144.0, 160.0]
我們來根據(jù)這個例子的語法結構來分析一下:
在使用復雜的列表推導式的時候我們可以采用這種方式,可以理解為我們先把符合條件的元素(條件語句)從對象中挑選出來,然后再經過輸出表達式的處理,最后存放到了列表當中,形成新的列表。
4. 例題
下面提供幾道例題可以嘗試著做一下。
1.列表[1,2,13,22,25],請使用使用列表推導式提取出大于10的數(shù),并把每個數(shù)平方,最終輸出。
運行結果為:
[169, 484, 625]
代碼如下,可以先嘗試做完參考答案。
list = [1,2,13,22,25] newlist = [i * i for i in list if i >10] print(newlist)
2.列表推導式求列表所有奇數(shù)并構造新列表,list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
代碼如下:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] newlist = [i for i in list if i%2 ==1] print(newlist)
輸出結果為:
[1, 3, 5, 7, 9]
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程