Python中存在一種特殊的表達式,名為推導式,它的作用是將一種資料結構作為輸入,再經過過濾計算等處理,最後輸出另一種資料結構。根據資料結構的差異會被分成列表推導式、集合推導式和字典推導式。我們先著重介紹最常使用的列表推導式。
我們先來看看列表推導式的語法格式:
listname=[expressionforvariablein物件(ifcondition)]
listname:新產生的清單名字。
expression:表達式。
variable:變數名。
(if condition):用於從物件中選擇符合要求的清單。
我們分別從規定範圍的數值列表、規定條件的列表和符合條件元素組成的列表三個方面來講起。
我們先思考一下當我們需要產生10個數字並存放列表當中,我們先來看看普通方式:
listname=[]foriinrange(10):listname.append(i)print(listname)
輸出結果為:
[0,1,2,3,4,5,6,7,8,9]
而使用列表推導式只需要一行就可以:
listname=[iforiinrange(10)]
輸出結果為:
[0,1,2,3,4,5,6,7,8,9]
這種方式能簡化我們在定義清單時的操作。
假定我們已知一個列表為listname = [1,3,5,6,7,9,10,23,26,28,64,98],我們要找到其把裡面的數全部加5,普通方法:
listname=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(listname)):listname[i]+=5print(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+5foriinlistname]
輸出:
[6,8,10,11,12,14,15,28,31,33,69,103]
這種類型的列表推導式要比前兩種複雜點,但是能簡化更多的程式碼。
我們先舉個列子來看一下程式碼格式:
已知一個列表為listname = [8,33,53,64,73,95,101,123,126,164,198],然後我們要找出列表中小於大於100的數字,然後乘上0.8,最後回到列表中。
如果我們使用普通方法:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#建立新清單來儲存foriinrange(len(listname)):#索引值遍歷iflistname[i]>100:#找到大於100的數listname[i]*=0.8#乘上0.8newlist.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.8foriinlistnameifi>100]print(newlist)
輸出結果:
[96.0,104.0,112.0,128.0,144.0,160.0]
我們來根據這個例子的語法結構來分析一下:
在使用複雜的列表推導式的時候我們可以採用這種方式,可以理解為我們先把符合條件的元素(條件語句)從對像中挑選出來,然後再經過輸出表達式的處理,最後存放到了列表當中,形成新的列表。
下面提供幾道例題可以嘗試做一下。
1.列表[1,2,13,22,25],請使用使用列表推導式提取大於10的數,並將每個數平方,最終輸出。
運行結果為:
[169,484,625]
程式碼如下,可以先嘗試做完參考答案。
list=[1,2,13,22,25]newlist=[i*iforiinlistifi>10]print(newlist)
2.列表推導式求列表所有奇數並建構新列表,list= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
程式碼如下:
list=[1,2,3,4,5,6,7,8,9,10]newlist=[iforiinlistifi%2==1]print(newlist)
輸出結果為:
[1,3,5,7,9]