Whats's up guys! 我是 Rex,經過了兩個假日 (研究生放風時間),今天繼續跟大家分享我的 Python 筆記。
在之前的討論中,我們聊到了像元組、字典、集合和列表這些資料結構,以及它們如何幫助我們有效地儲存和組織資料。現在,讓我們更進一步,探索列表和字典生成式(comprehensions)!這些技巧就像魔法一樣,能用簡潔又優雅的語法快速創建和轉換資料結構。掌握資料結構的基礎,可以幫助我們選擇最適合的工具,而熟悉生成式則能讓我們動態操作和生成資料,讓程式碼更具易讀性和更有效率。
優點:
在正式介紹生成式之前,我想先讓讀者們比較一下 List/Dictionary comprehension 和傳統 for loop 在外觀上的差異。首先,我們先來看看 List Comprehension。假設我們需要產生一個列表,其中包含 1 到 10 之間所有偶數的平方。
# 傳統 for loop
squared_even_number = [] # 先創建一個空列表
for i in range(1, 11):
if i % 2 == 0:
squared_even_number.append(i**2)
# List Comprehension
squared_even_number = [i ** 2 for i in range(1, 11) if i % 2 == 0] # [4, 16, 36, 64, 100]
再來,我們來看看 Dictionary Comprehension。假設我們有一個字典,其中包含學生的名字和成績,我們想要生成一個新的字典,其中包括學生的名字和成績分級。如果分數大於或等於 90,則給予 A;在 80 到 90 之間給予 B;在 70 到 80 之間給予 C;其餘的則給予 D。
# 傳統 for loop
students = {"Alice": 85, "Bob": 70, "Charlie": 95, "Diana": 60}
grades = {} # 先創建一個空字典
for name, score in students.items():
if score >= 90:
grades[name] = "A"
elif score >= 80:
grades[name] = "B"
elif score >= 70:
grades[name] = "C"
else:
grades[name] = "D"
# Dictionary Comprehension
grades = {name: ("A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "D")
for name, score in students.items()} # {'Alice': 'B', 'Bob': 'C', 'Charlie': 'A', 'Diana': 'D'}
從上面兩個例子可以看出 List/Dictionary Comprehension 的簡潔和易讀性,但我相信對新手來說也可能有些複雜。因此,在開始教程之前,我先分享一個我覺得蠻實用的小抄。
我相信這個小抄算是一目瞭然,我就不多做解釋,那我們現在開始教程。
transactions = [12, 45, 23, 10, 8, 37]
high_value_transactions = [amount for amount in transactions if amount > 20]
# Output: [45, 23, 37]
temperatures_celsius = [20, 25, 30, 35]
temperatures_fahrenheit = [temp * 9/5 + 32 for temp in temperatures_celsius]
# Output: [68.0, 77.0, 86.0, 95.0]
assignments_feedback = [
["Assignment1", ["Good work", "Keep it up", "Well done"]],
["Assignment2", ["Needs improvement", "Excellent effort", "Keep it up"]],
["Assignment3", ["Great job", "Needs more effort", "Very insightful"]]
]
flat_feedback = [comment for assignment, feedback in assignments_feedback for comment in feedback]
"""
# Output: ['Good work',
'Keep it up',
'Well done',
'Needs improvement',
'Excellent effort',
'Keep it up',
'Great job',
'Needs more effort',
'Very insightful']
"""
students = {'Alice': 85, 'Bob': 76, 'Charlie': 90}
passed_students = {name: score for name, score in students.items() if score >= 80}
# Output: {'Alice': 85, 'Charlie': 90}
prices = [100, 200, 300]
discounted_prices = {i: price * 0.9 for i, price in enumerate(prices)}
# Output: {0: 90.0, 1: 180.0, 2: 270.0}
words = ['apple', 'banana', 'pear', 'apple', 'banana']
word_counts = {word: words.count(word) for word in set(words)}
# Output: {'banana': 2, 'apple': 2, 'pear': 1}
以上就是List/Dictionary Comprehension 的教學內容。我個人非常常用這個功能,尤其是在資料分析中進行資料的轉換、篩選和整合時。希望今天提供的例子能幫助各位讀者更好地掌握這個技巧。和以往一樣,最後我會提供兩個 Coding Question 和一個概念問題,希望透過這些練習,進一步加深大家對這個技巧的理解和應用。
# Example Data
city_population = { 'Amsterdam': 800000, 'New York': 8000000, 'Tokyo': 14000000, 'London': 8900000, 'Sydney': 500000, 'Mumbai': 20000000, 'Beijing': 21000000, 'Shanghai': 24200000, 'Istanbul': 15000000, 'Mexico City': 9200000 }
今天的教學就到這裡啦!希望大家透過這篇文章對 List/Dictionary Comprehension 有更深入的了解。如果你對文章中提到的操作或應用有任何問題,歡迎在留言區討論,或者分享你使用這些函式解決問題的經驗!也別忘了試試我提供的練習題目喔!祝大家練習順利,我們下次見啦~