Mike的Python學院

Python、程式語言

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/22

Python Comprehension語法應用教學(上)

Q:Python List Comprehension如何使用?
串列(List)Comprehension的語法包含三個部分,說明如下:
[expression for item in iterable]
1.expression:可以是 item 或運算式。
2.item:接收可疊代的物件(Iterable Object)元素。
3.iterable:可疊代的物件(Iterable Object)。
通常要建立一個串列(List),可以透過for迴圈的方式,如下範例:
numbers = []
for x in range(10):
numbers.append(x * 3)
如果透過串列(List)Comprehension來進行改寫的話,只需要一行即可達到相同的執行結果,如下範例:
numbers = [x * 3 for x in range(10)]
x * 3 就是串列(List)Comprehension中的運算式(expression),而 x 是接收可疊代的物件(Iterable Object)變數,最後就是可疊代的物件(Iterable Object) range(10) 。透過for迴圈的方式讀取元素值,並且乘以3來建立串列(List),語法是不是非常簡潔~
假設要在串列(List)Comprehension中利用條件判斷來篩選元素時,則可以使用下列語法:
[expression for item in iterable (if condition)]
延伸上面的範例,當 x 大於4的時候,我們才乘以3的動作,串列(List)Comprehension的寫法如下範例:
numbers = [x * 3 for x in range(10) if x > 4]
另外,串列(List)元素的運算及篩選可以利用Python的內建函式map()和filter()等,其中除了能夠透過Lambda函式來達成,串列(List)Comprehension語法同樣也可以實作。
Q:Python map()函式使用List Comprehension如何改寫?
map()函式可以將特定運算式套用至可疊代的物件(Iterable Object)元素,如下範例:
numbers = [50, 2, 12, 30, 27, 4]
result = list(map(lambda x: x * 2, numbers))
print(result) #執行結果:[100, 4, 24, 60, 54, 8]
map()函式利用Lambda函式來進行元素的運算,最後透過list()函式來轉型成串列(List)。而串列(List)Comprehension可以改寫成:
numbers = [50, 2, 12, 30, 27, 4]
result = [number * 2 for number in numbers]
print(result) #執行結果:[100, 4, 24, 60, 54, 8]
Q:Python filter()函式使用List Comprehension如何改寫?
filter()函式可以幫我們篩選可疊代的物件(Iterable Object)元素,如下範例:
numbers = [50, 2, 12, 30, 27, 4]
result = list(filter(lambda x: x > 10, numbers))
print(result) #執行結果:[50, 12, 30, 27]
在串列(List)Comprehension中則可以改寫為:
numbers = [50, 2, 12, 30, 27, 4]
result = [number for number in numbers if number > 10]
print(result) # 執行結果:[50, 12, 30, 27]
如果要依據條件來"改變"串列(List)中的值時,則要把條件判斷移至前方,如下範例:
numbers = [50, 2, 12, 30, 27, 4]
result = [number if number > 10 else 0 for number in numbers]
print(result) # 執行結果:[50, 0, 12, 30, 27, 0]
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/01/python-comprehension.html )網站觀看更多精彩內容。
0 0 154 0