如標題,這篇想和大家聊聊「列表推導式」是什麼東西
我們先看看範例再說明,這樣大家會比較好理解
Ex 1:
如果你今天有一for迴圈長這樣:
# 依序印出0~9的二次方為何
for i in range(10):
print(i*i)
# 結果為: 0 1 4 9 16 25 36 49 64 81
你可以用「列表推導式」將它改寫成這樣:
# 依序算出0~9的二次方為何,並將其結果存在一列表內,再用變數result儲存
result = [i*i for i in range(10)]
print(result)
# 結果為: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
看完範例一,再看看範例二
Ex 2:
有一列表為Ax
,現在你想用for迴圈和if去找4的倍數
有哪些,並將它們印出來:
Ax = [20, 22, 16, 15, 18, 17]
# 有一列表為Ax,for迴圈會執行len(Ax)次,len(Ax)是計算Ax的總長度為何
for i in range(len(Ax)):
# 判斷Ax內有無4的倍數,有則印出
if (Ax[i]%4==0):
print(Ax[i])
# 結果為: 20 16
你可以用「列表推導式」將它們改寫成這樣:
# 判斷Ax內有無4的倍數,有則將結果存在一列表內,並用變數result儲存
result = [Ax[i] for i in range(len(Ax)) if Ax[i]%4==0]
print(result)
# 結果為: [20, 16]
看到這裡,你應該猜到「列表推導式」的功用是什麼了
它的「目的」是為了讓程式碼看起來更加簡潔,在撰寫上會更方便快速,其結果會存到「一列表內」,所以答案印出來都會是列表的形式
其架構如下:
[結果 for 變數 in 範圍]
它也可以將if-else
等判斷式寫在裡面,但請注意! 如果只有「單一if
」的時候,它需寫在「範圍的後面
」
其架構如下:
[if的結果 for 變數 in 範圍 if (if的判斷條件)]
如果是「if-else同時出現
」,需寫在「for的前面
」
其架構如下:
[if的結果 if (if的判斷條件) else else的結果 for 變數 in 範圍]
知道if-else
同時出現的架構後,讓我們看看範例三
Ex 3:
給你一個列表year
,今天要你在year這個列表內,找出閏年為何
:
year = [2015, 2020, 2012, 2013]
# 有一列表為year,for迴圈會執行len(year)次
for i in range(len(year)):
# 判斷year內有哪些是閏年,是則印出是閏年,不是則印出不是閏年
if ((year[i]%4==0 and year[i]%100!=0) or year[i]%400==0):
print(year[i], "是閏年")
else:
print(year[i], "不是閏年")
# 結果為:2015 不是閏年
# 2020 是閏年
# 2012 是閏年
# 2013 不是閏年
你可以用「列表推導式」將它們改寫成這樣:
# 判斷year內有哪些是閏年,是則印出是閏年,不是則印出不是閏年,並將其結果存在一列表內,用變數LeapYear儲存
LeapYear = [(year[i], "是閏年") if ((year[i]%4==0 and year[i]%100!=0) or year[i]%400==0) else (year[i], "不是閏年") for I, v in enumerate(year)]
print(LeapYear)
# 結果為: [(2015, '不是閏年'), (2020, '是閏年'), (2012, '是閏年'), (2013, '不是閏年')]
以上就是今天的介紹
如果你想加上if
或if-else
的判斷式,請務必記住它的擺放位置!
因為我之前一直把if-else
放在「範圍的後面」,以至於程式一直報錯,所以它的擺放位置真的是世界宇宙無敵重要!!!