90. Python列表推導式
1. 知識回顧
1.1 append函數知識回顧
29.append函數向列表添加元素
append [??pend]增加,附加。
【語法】
列表名.append(要增加的元素)
【代碼示例】
# 創(chuàng)建列表 name_list
name_list = ['張三']
# 用 append() 給列表 name_list 添加一個元素 '王五'
# 列表名.append(要增加的元素)
name_list.append('王五')
# 輸出 name_list 列表
print(name_list)
【終端輸出】
['張三', '王五']
1.2 range函數知識回顧
42. range函數—生成器函數
range[re?nd?]:按一定的次數排列。
【語法】
range(開始字符,結束字符,步長)
【參數說明】
-
參數start:表示起始的整數(包含該整數),如果不指定,則默認為
0
。 -
參數end:表示結束的整數(不包含該整數),不能省略。
-
參數step:表示步長,即兩個數之間的間隔。如果省略,則默認為1,當省略該步長時,最后一個英文逗號也可以省略。
【重點提示】
切片和range函數都包括開始字符,不包括結束字符,簡單記憶為含前不含后
。
【返回值】
range函數返回的是一個range對象。
range函數不能直接生成列表或元組,必需利用list、tuple函數將其轉換成列表或元組。
【代碼示例】
r1 = range(3)
r2 = range(1,3)
r3 = range(2,8,3)
print("r1的值為:",list(r1))
print("r2的值為:",list(r2))
print("r3的值為:",list(r3))
【終端輸出】
r1的值為: [0, 1, 2]
r2的值為: [1, 2]
r3的值為: [2, 5]
1.3 if 條件判斷奇偶數
【代碼示例】
i = 9
if i%2 ==0 :
print("i是偶數!")
else:
print("i是奇數!")
【終端輸出】
i是奇數!
【代碼示例】
i = 4
if i%2 ==0 :
print("i是偶數!")
else:
print("i是奇數!")
【終端輸出】
i是偶數!
%
表示取余。
一個數除以2的余數為0則該數為偶數,否則為奇數。
2. 課題導入
【目標任務】
創(chuàng)建一個1~5
的數字列表。
2.1 直接創(chuàng)建列表
list1= [1, 2, 3, 4, 5]
print(list1)
【終端輸出】
[1, 2, 3, 4, 5]
列表用[]
表示。
最簡單粗暴的方法就是直接用[]
創(chuàng)建。
2.2 while循環(huán)創(chuàng)建列表
list2 = [ ] # 新建一個空列表備用
i = 1 #給變量i賦一個初始值1
while i<=5 : # 用i來控制循環(huán)次數
list2.append(i) # 用append函數將i添加到空列表中
i += 1 # i的累加
print(list2)
【終端輸出】
[1, 2, 3, 4, 5]
這里用while循環(huán)創(chuàng)建列表用了6行代碼。
2.3 for循環(huán)創(chuàng)建列表
list3 = [] # 新建一個空列表備用
for i in range(1, 6): # 創(chuàng)建有規(guī)律的數字列表最便捷的方法就是用range函數
list3.append(i) # 用append函數將i添加到空列表中
print(list3)
【終端輸出】
[1, 2, 3, 4, 5]
這里用for循環(huán)創(chuàng)建列表用了4行代碼。
2.4 用列表推導式創(chuàng)建列表
list4 = [ i for i in range(1,6)]
print(list4)
【終端輸出】
[1, 2, 3, 4, 5]
這里用列表推導式創(chuàng)建列表僅用了2行代碼。
【總結】
從代碼的簡潔程度來講,用列表推導式創(chuàng)建列表最為簡單。
3. 什么是列表推導式
【定義】
列表推導式就是利用表達式及已知的列表創(chuàng)建(控制)一個有規(guī)律的列表。
已知的列表可以替換成可迭代對象。
【語法】
[表達式 for 迭代變量 in 可迭代對象 if條件表達式]
【表達式分析】
列表推導式主要由4個部分組成。
-
英文中括號
[]
。 -
表達式。
-
for循環(huán)語句。
-
if條件表達式。
if 條件表達式不是必須的,根據實際情況可以有也可以沒有。
語法中英文中括號中[]
的3個部分內容之間用空格間隔。
即表達式后加一個空格,然后跟一個for循環(huán)語句,然后再加一個空格,最后再寫if條件判斷語句。
【列表推導式示例】
list4 = [ i for i in range(1,6)]
【語法如下】
[表達式 for 迭代變量 in 可迭代對象]
第1個i指的是表達式。
for i in range(1,6)
是一個for循環(huán)語句。
range(1,6)
是一個可迭代對象,即定義中的已知列表。
for循環(huán)每次迭代都從range(1,6)
取出元素,賦值給迭代變量i
。
然后利用表達式對迭代變量進行變形,生成一個新的列表。
這里的表達式就是迭代變量本身,因此生成的就是由迭代變量組成的新的列表。
4. 列表推導式的作用
列表推導式的作用就是簡化代碼。
4.1 作用1:變形
計算輸出0~5序列的所有數的平方。
list5 = [ i**2 for i in range(1,6)]
print(list5)
【終端輸出】
[1, 4, 9, 16, 25]
【定義】
列表推導式就是利用表達式及已知的列表創(chuàng)建(控制)一個有規(guī)律的列表。
【解析】
表達式:i**2
已知的列表:range(1,6)
創(chuàng)建的新列表:[1, 4, 9, 16, 25]
【語法如下】
[表達式 for 迭代變量 in 可迭代對象]
【推導式如下】
list5 = [ i**2 for i in range(1,6)]
4.2 作用2:過濾
計算輸出10以內的偶數的平方。
list6 = [ i**2 for i in range(1,11) if i%2==0]
print(list6)
【終端輸出】
[4, 16, 36, 64, 100]
【定義】
列表推導式就是利用表達式及已知的列表創(chuàng)建(控制)一個有規(guī)律的列表。
【解析】
表達式:i**2
已知的列表:range(1,11)
創(chuàng)建的新列表:[4, 16, 36, 64, 100]
【語法如下】
[表達式 for 迭代變量 in 可迭代對象 if條件表達式]
【推導式如下】
list6 = [ i**2 for i in range(1,11) if i%2==0]
和之前的代碼相比,這里只是多了一個if條件判斷語句if i%2==0
。
5. 實操練習
5.1 輸出20以內的奇數
list7 = [ i for i in range(1,21) if i%2!=0]
print(list7)
【終端輸出】
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
【語法解析】
表達式:i
for循環(huán)語句:for i in range(1,21)
if條件判斷語句:if i%2!=0
已知的列表:range(1,21)
5.2 輸出一個整數各個位數上的數字
【輸入】
假設這個整數為2468。
【輸出】
2 4 6 8
【代碼示例】
x = 2468
y = [ int(i) for i in str(x)]
print(y)
【代碼解析】
一個整數為2468,我們要依次取出該整數中的每個數字,我先用str
函數將整數轉換為字符串類型。
用for循環(huán)依次遍歷該字符串,即可取出該數字中的每個字符,注意得到的是字符串類型。
x = 2468
for i in str(x):
print(i)
print(type(i))
【終端輸出】
2
4
6
8
<class 'str'>
題目要求是要輸出數字,因此我們又利用int
函數將字符串類型的字符轉換為整數。
x = 2468
for i in str(x):
print(int(i))
print(type(int(i)))
【終端輸出】
2
4
6
8
<class 'int'>
這是我們之前掌握的方法,學了列表推導式,我們只需一行代碼就可以解決該問題了,如下所示:
x = 2468
y = [ int(i) for i in str(x)]
print(y)
【語法解析】
表達式:int(i)
for循環(huán)語句:for i in str(x)
可迭代對象:str(x)
5.3 調整列表順序
已知一個整數列表,要求調整元素順序,把列表中的奇數放在列表的前面,偶數放在列表的后面。
【輸入】
[1,2,3,4,5,6,7,8]
【輸出】
[1,3,5,7,2,4,6,8]
【思路解析】
-
取出整數列表中的奇數放入列表x中。
-
取出整數列表中的偶數放入列表y中。
-
合并列表x和y。
x = [i for i in range(1,9) if i%2 != 0]
print(x)
y = [i for i in range(1,9) if i%2 == 0]
print(y)
print(x+y)
【終端輸出】
[1, 3, 5, 7]
[2, 4, 6, 8]
[1, 3, 5, 7, 2, 4, 6, 8]
【語法解析】
表達式:i
for循環(huán)語句:in range(1,9)
if條件判斷語句:if i%2 != 0
已知的列表:range(1,9)
5.4 用map函數輸出列表中所有元素的平方數
list1 = [1,2,3,4]
def fn (x):
return x**2
res = map(fn, list1)
res = [i for i in res]
print(res)
【終端輸出】
[1, 4, 9, 16]
【代碼解析】
自定義一個函數fn。
x就是自定義函數fn的參數。
函數fn返回的是x的平方。
【代碼示例】
def fn (x):
return x**2
fn(3)
【終端輸出】
9
fn(3)調用自定義函數。
這里的3傳遞給了fn函數的參數x。
題目要求的是輸出列表中所有數的平方數,因此傳遞的參數就不是一個數,應該是列表里的所有元素。
res = map(fn, list1)
map函數的相關知識在第83節(jié),鏈接如下:
83.map函數()-通過函數實現(xiàn)對可迭代對象的操作
map [m?p]:地圖,映射。
【語法】
map(function, iterables=, ...)
【功能】
map函數接收一個函數為它的參數,接收一個或多個可迭代對象為另一個參數,返回一個迭代器。
此迭代器中的每個元素都是函數參數依次作用于可迭代對象后的結果。
map函數在這里的功能就相當于依次取出列表中的元素,進行fn函數運算,然后返回的結果是迭代器。
要顯示迭代器里的具體內容,我們可以通過list函數,也可以用列表推導式。
map函數的參數1是fn自定義函數。
map函數的參數2是list1列表。
map函數返回的是一個迭代器。
【代碼示例】
list1 = [1,2,3,4]
def fn (x):
return x**2
res = map(fn, list1)
print(res)
【終端輸出】
<map object at 0x000001F4E9E23CA0>
【列表推導式輸出迭代器中的元素】
list1 = [1,2,3,4]
def fn (x):
return x**2
res = map(fn, list1)
res = [i for i in res]
print(res)
【終端輸出】
[1, 4, 9, 16]
i for i in res
這是一個列表推導式。
表達式:i**2
已知的列表:res
創(chuàng)建的新列表:[1, 4, 9, 16]
【list函數輸出迭代器中的元素】文章來源:http://www.zghlxwxcb.cn/news/detail-470488.html
list1 = [1,2,3,4]
def fn (x):
return x**2
res = map(fn, list1)
print(list(res))
【終端輸出】文章來源地址http://www.zghlxwxcb.cn/news/detail-470488.html
[1, 4, 9, 16]
到了這里,關于90. Python列表推導式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!