文章目錄(PS:覺得不錯請點贊收藏支持一下)
- 一、推導式
- 1.1 串列推導式
- 1.2 字典推導式
- 1.3 集合推導式
- 二、任務清單
- 總結
一、推導式
1.1 串列推導式
給大家舉個簡單的例子可能就明白了,如下需求
- 語法格式
[運算式 for 變數 in 可迭代物件]
- 生成一個串列,串列中有 0-9 數字
# 平常我們會這樣寫
list1 = []
for item in range(0,10,1):
list1.append(item)
print(list1)
# 結果為 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 使用推導式就是這樣寫,這樣...那樣...很簡單的就寫好了
list2 = [i for i in range(10)]
print(list2)
# 結果為 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
"""
1. for 回圈執行幾次,就會將 for 前面的值向新的空串列中添加幾次
2. for 前面的資料是什么,就會將其添加到當前串列中
3. 換句話說, for 前面的內容是什么,就會將其添加到當前串列匯總, for 回圈幾次,就會向當前串列添加幾次
"""
- 帶 if 的串列推導式
"""
1. range 函式方法生成了串列[0,1,2,3,4,5,6,7,8,9,10]
2. for 回圈遍歷這個串列,篩選出所有偶數,將 i 的值作為當前串列中的元素,
"""
list6 = [i for i in range(0,11) if i % 2 == 0]
print(list6)
# 結果為 [0, 2, 4, 6, 8, 10]
- 多個 for 回圈實作串列推導式
n1 = [1,2,3]
n2 = [4,5,6]
n3 = [(i,j) for i in n1 for j in n2]
print(n3)
# 結果為 [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
# 相當于如下代碼:
for i in n1:
for j in n2:
print(i,j)
1.2 字典推導式
- 語法格式
{鍵運算式:值運算式 for 運算式 in 可迭代物件}
- 應用例題
- 創建一個字典,字典 key 是 1-5 數字,value 是這個數字的 2 次方,
dict2 = {i: i ** 2 for i in range(1,6)}
print(dict2)
# 結果為 {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
- 將兩個串列合并為一個字典
list1 = ['name','age','gender']
list2 = ['Tom',20,'man']
dict2 = {list1[i]:list2[i] for i in range(len(list1))}
print(dict2)
# 結果為 {'name': 'Tom', 'age': 20, 'gender': 'man'}
- 提取字典中目標資料
counts = {'MBP': 268,'hp':125,'DELL': 201}
# 需求: 提取上述電腦數量大于等于 200 的資料
new_counts = {key:value for key,value in counts.items() if value >= 200}
print(new_counts)
# 結果為 {'MBP': 268, 'DELL': 201}
1.3 集合推導式
- 語法格式
{運算式 for 運算式 in 可迭代變數}
集合推導式與串列推式 是一樣的,不再多舉了,
set1 = {i for i in range(0,10,2)}
print(set1)
# 結果為 {0, 2, 4, 6, 8}
二、任務清單
- 使用推導式將串列中的數字都乘以2
list1 = [1,2,3,4,5,6]
list2 = [i*2 for i in list1]
print(list2)
# 結果為 [2, 4, 6, 8, 10, 12]
- 使用推導式將串列中的數字都乘以2再加上10
list1 = [1,2,3,4,5,6]
list2 = [i*2+10 for i in list1]
print(list2)
# 結果為 [12, 14, 16, 18, 20, 22]
- 使用推導式將串列中的偶數都乘以2
list1 = [1,2,3,4,5,6]
list2 = [i*2 for i in list1 if i % 2 ==0]
print(list2)
# 結果為 [4, 8, 12]
- 使用推導式將串列中的奇數都乘以2
list1 = [1,2,3,4,5,6]
list2 = [i*2 for i in list1 if i % 2 !=0]
print(list2)
# 結果為 [2, 6, 10]
- 使用推導式將串列中大于等于10的數字都乘以2
list1 = [1,2,3,4,5,6,11,15]
list2 = [i*2 for i in list1 if i >= 10]
print(list2)
# 結果為 [22, 30]
- 使用推導式將串列中所有的三位數都乘以2
list1 = [10,50,120,110]
list2 = [i*2 for i in list1 if i > 99]
print(list2)
# 結果為 [240, 220]
- 有如下的串列
"""
l1=['hello','nice','nine','world','none']
使用推導式篩選出所有以字母 n 開頭的元素,并輸出
使用推導式篩選出所有以字母 e 結束的元素,并輸出
"""
l1=['hello','nice','nine','world','none']
list2 = [i for i in l1 if i.startswith('n') or i.endswith('e')]
print(list2)
# 結果為 ['nice', 'nine', 'none']
- 有下面的串列
"""
l1=['hello ','world ','你好 ']
使用推導式將每個元素后面的空格去掉,并輸出
"""
l1=['hello ','world ','你好 ']
list2 = [i.rstrip() for i in l1]
print(list2)
# 結果為 ['hello', 'world', '你好']
- 有如下串列
"""
l1 = ['北京', '保定', '石家莊', '邯鄲', '承德']
使用推導式將當前串列改成如下這樣
['北京歡迎您', '保定歡迎您', '石家莊歡迎您', '邯鄲歡迎您', '承德歡迎您']
"""
l1 = ['北京', '保定', '石家莊', '邯鄲', '承德']
list2 = [i+'歡迎您' for i in l1]
print(list2)
# 結果為 ['北京歡迎您', '保定歡迎您', '石家莊歡迎您', '邯鄲歡迎您', '承德歡迎您']
- 有如下串列
"""
l1 = ['北京', '常州', '蘇州', '定州', '承德']
使用推導式從當前串列生成如下串列
['常州歡迎您', '蘇州歡迎您', '定州歡迎您']
說明:將所有帶“州”的城市篩選出來,并與“歡迎您”合并
"""
l1 = ['北京', '常州', '蘇州', '定州', '承德']
list2 = [i+'歡迎您' for i in l1 if i.endswith('州')]
print(list2)
# 結果為 ['常州歡迎您', '蘇州歡迎您', '定州歡迎您']
- 游泳比賽成績統計:
"""
讓用戶錄入5位參賽者的成績(使用 input 函式輸入)
使用串列存盤這5個成績,如 [50,90,70,88,60]
使用推導式找出所有大于等于80分的成績并輸出
使用推導式將每個成績加上10分,并輸出
使用推導式篩選出大于等于平均分(平均分可以單獨運算)的成績,并輸出
"""
list1 = []
i = 1
while i < 6:
score = float(input('請輸入成績:'))
list1.append(score)
i += 1
# 使用推導式找出所有大于等于80分的成績并輸出
list2 = [i for i in list1 if i >= 80]
print(list2)
# 使用推導式將每個成績加上10分,并輸出
list3 = [i+10 for i in list1]
print(list3)
# 使用推導式篩選出大于等于平均分(平均分可以單獨運算)的成績,并輸出
average = sum(list1) / len(list1) # 計算平均分
list4 = [i for i in list1 if i >= average]
print(list4)
- 有如下串列
"""
l1 = ['a', 'B', 'c', 'D', 'E', 'F', 'g']
使用推導式篩選出所有的大寫字母
統計串列中大寫字母的數量,并輸出
"""
# 使用推導式篩選出所有的大寫字母
l1 = ['a', 'B', 'c', 'D', 'E', 'F', 'g']
list1 = [i for i in l1 if i.isupper()]
print(list1)
# 統計串列中大寫字母的數量,并輸出
l1 = ['a', 'B', 'c', 'D', 'E', 'F', 'g']
list1 = [i for i in l1 if i.isupper()]
print(len(list1))
- 字典推導式練習
"""
有如下兩個串列
d_name = ['name', 'age', 'gender', 'address']
d_score = ['大鯊魚', 30, '男', '美國弗羅里達州']
使用推導式將其組成一個字典,格式如下
{'name': '大鯊魚', 'age': 30, 'gender': '男', 'address': '美國弗羅里達州'}
"""
d_name = ['name', 'age', 'gender', 'address']
d_score = ['大鯊魚', 30, '男', '美國弗羅里達州']
dict1 = {d_name[i] : d_score[i] for i in range(len(d_name))}
print(dict1)
# 結果為 {'name': '大鯊魚', 'age': 30, 'gender': '男', 'address': '美國弗羅里達州'}
- 字典推導式練習
"""
有如下兩個串列
d_name = ['brand', 'color', 'camer', 'system']
d_score = ['apple', '黑色', '8K攝影', 'ios']
使用推導式將其組成一個字典,格式如下:
{'brand': 'apple', 'color': '黑色', 'camer': '8K攝影', 'system': 'ios'}
"""
d_name = ['brand', 'color', 'camer', 'system']
d_score = ['apple', '黑色', '8K攝影', 'ios']
dict1 = {d_name[i] : d_score[i] for i in range(len(d_name))}
print(dict1)
# 結果為 {'brand': 'apple', 'color': '黑色', 'camer': '8K攝影', 'system': 'ios'}
總結
lalalalalalalaaa… 【i love you !】

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299192.html
標籤:python
