這篇文章是在解說上一篇文章:[Python教學] 進階:函數式程式設計 的課後練習的題目的解答,如果還沒看過上一篇文章的話建議可以先行前往閱讀!
寫一個高階函數 apply_operation
,它接受兩個整數和一個函數作為參數,並返回兩個整數相加後的結果。
例如:apply_operation(4, 5, add)
應返回 9
。
def add(x, y):
return x + y
def apply_operation(x, y, func):
return func(x, y)
result = apply_operation(4, 5, add)
print(result) # Output: 9
定義一個列表 words
,裡面包含多個字串。使用 filter()
和 lambda 函數,篩選出字串長度大於 5 的單詞,並將結果儲存為新列表。
例如:words = ["apple", "banana", "grape", "cherry", "strawberry"]
,結果應為 ["banana", "strawberry"]
。
words = ["apple", "banana", "grape", "cherry", "strawberry"]
long_words = list(filter(lambda word: len(word) > 5, words))
print(long_words) # Output: ["banana", "strawberry"]
給定一個整數列表 numbers
,使用 map()
和 lambda 函數將所有數字平方,並將結果存儲為新列表。
例如:numbers = [2, 3, 4]
,結果應為 [4, 9, 16]
。
numbers = [2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # Output: [4, 9, 16]
使用 filter()
和 reduce()
計算列表中所有偶數的總和。
例如:numbers = [1, 2, 3, 4, 5, 6]
,結果應為 12
。
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6]
even_sum = reduce(lambda x, y: x + y, filter(lambda x: x % 2 == 0, numbers))
print(even_sum) # Output: 12
給定一個包含正整數的列表,找出所有可以被 3 整除的數字,將它們的立方(次方 3)計算出來,最後使用 reduce()
將這些數字的總和求出。
例如:numbers = [3, 5, 6, 9, 12]
,結果應為 1536
(即 33+63+93+1233^3 + 6^3 + 9^3 + 12^333+63+93+123)。
from functools import reduce
numbers = [3, 5, 6, 9, 12]
result = reduce(lambda x, y: x + y, map(lambda x: x ** 3, filter(lambda x: x % 3 == 0, numbers)))
print(result) # Output: 1536
寫一個函數 capitalize_and_filter
,將包含多個字串的列表中的每個字串首字母轉成大寫,然後篩選掉所有包含 "a" 的字串。
例如:words = ["apple", "banana", "grape", "cherry", "blueberry"]
,結果應為 ["Grape", "Cherry"]
。
def capitalize_and_filter(words):
return list(filter(lambda word: "a" not in word.lower(), map(lambda word: word.capitalize(), words)))
words = ["apple", "banana", "grape", "cherry", "blueberry"]
filtered_words = capitalize_and_filter(words)
print(filtered_words) # Output: ["Grape", "Cherry"]
寫一個函數 int_to_string_with_filter
,接受一個整數列表,將每個偶數轉換為字串,然後將它們儲存在新列表中。
例如:int_to_string_with_filter([1, 2, 3, 4, 5, 6])
的輸出應為 ["2", "4", "6"]
。
def int_to_string_with_filter(numbers):
return list(map(str, filter(lambda x: x % 2 == 0, numbers)))
numbers = [1, 2, 3, 4, 5, 6]
even_strings = int_to_string_with_filter(numbers)
print(even_strings) # Output: ["2", "4", "6"]
使用 map()
與 reduce()
來計算一組字串列表中所有字串長度的總和。
例如:words = ["apple", "banana", "grape"]
,應返回 16
。
from functools import reduce
words = ["apple", "banana", "grape"]
total_length = reduce(lambda x, y: x + y, map(len, words))
print(total_length) # Output: 16