Python 串列推導式:簡潔、高效的資料操作藝術
Python 的串列推導式,這個看似簡單的語法糖,實則內含無限威力,在 Python 代碼撰寫中,串列推導式的靈活性和簡潔性讓它成為了不可或缺的一部分,在這篇文章中,我們將更全面、更深入地探討串列推導式,從基礎的概念認識,到各類進階的用法和操作,我們一一揭秘,最后,我們還將在 "One More Thing" 部分分享一個非常有趣且實用的串列推導式技巧,這會讓你在編程道路上又多一份強大的工具,
1. 串列推導式:語法糖的力量
串列推導式,就是一種在 Python 中創建串列的方式,它的基礎形式如下:
[expression for item in iterable]
它實質上是一個 for 回圈的簡化形式,例如,我們可以用它來創建一個包含 0 到 9 平方的串列:
squares = [x**2 for x in range(10)]
print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
這樣,你不需要再使用傳統的 for 回圈來創建串列,代碼更加簡潔和清晰,
2. 過濾元素:帶條件的串列推導式
串列推導式更強大的地方在于,我們可以在其中加入條件判斷,以過濾出我們想要的元素:
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # Output: [0, 4, 16, 36, 64]
在這個例子中,我們只生成了偶數的平方,只需加入一個簡單的 if 條件,我們就可以靈活地過濾出我們需要的元素,
3. 復雜的資料結構:嵌套的串列推導式
更進一步,串列推導式還可以嵌套使用,處理更復雜的資料結構,比如我們要將一個嵌套串列展平:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [x for sublist in nested_list for x in sublist]
print(flattened_list) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
這個例子中,我們將一個二維的嵌套串列展平成了一維串列,就像是將多層次的資料展開,方便我們進行后續處理,
4. 資料變形:帶運算式的串列推導式
串列推導式中的運算式可以幫助我們對資料進行變形:
strings = ['Hello', 'World', 'In', 'Python']
lowercase_strings = [s.lower() for s in strings]
print(lowercase_strings) # Output: ['hello', 'world', 'in', 'python']
在這個例子中,我們將一個包含幾個字串的串列,通過 str.lower() 函式,將其轉換成了全小寫,通過改變運算式,我們可以在生成新串列的同時,對資料進行各種變形操作,
5. 推廣至其他資料結構:字典和集合的推導式
推導式不僅僅可以應用于串列,還可以推廣到字典和集合中:
squared_dict = {x: x**2 for x in range(5)}
print(squared_dict) # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
squared_set = {x**2 for x in range(5)}
print(squared_set) # Output: {0, 1, 4, 16, 9}
這兩個例子分別演示了字典推導式和集合推導式的用法,這些結構的推導式可以更方便我們處理復雜的資料結構,
6. 性能優化:串列推導式與 map/filter 的比較
串列推導式不僅代碼更加簡潔,實際上在很多情況下,串列推導式的執行效率也優于傳統的 map 或 filter 函式:
import time
# Using list comprehension
start_time = time.time()
squares = [x**2 for x in range(1000000)]
end_time = time.time()
print(f"List comprehension took {end_time - start_time} seconds")
# Using map function
start_time = time.time()
squares = list(map(lambda x: x**2, range(1000000)))
end_time = time.time()
print(f"Map function took {end_time - start_time} seconds")
在這個例子中,我們分別用串列推導式和 map 函式創建一個包含一百萬個元素的串列,可以看到串列推導式的執行時間通常要少于 map 函式,
One More Thing
在我的 GitHub 學習程序以及在各種技術博客中閱讀,我發現一個關于串列推導式的有趣且實用的技巧,那就是使用串列推導式實作全排列:
perms = [(x, y, z) for x in range(3) for y in range(3) for z in range(3) if x != y and y != z and x != z]
print(perms) # Output: [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
這個例子通過串列推導式生成了 3 個元素的全排列,使用了嵌套回圈和條件判斷,非常簡潔而高效,
總的來說,Python 的串列推導式是一個非常強大而靈活的工具,能夠幫助我們更好地處理資料和創建資料結構,希望這篇文章能幫助你更深入地理解和應用串列推導式,讓你的 Python 代碼更加簡潔和高效,
如有幫助,請多關注
個人微信公眾號:【Python全視角】
TeahLead_KrisChang,10+年的互聯網和人工智能從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里云認證云服務資深架構師,上億營收AI產品業務負責人,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554537.html
標籤:其他
上一篇:鏈家廣州二手房資料 2023
下一篇:返回列表
