掌握Python核心利器:列表推導、字典推導與集合推導全面解析

2024.06.24

在Python编程的世界里,推导式(Comprehensions)以其简洁、高效的特性,成为编写优雅代码的不二法门。列表推导(List Comprehensions)、字典推导(Dictionary Comprehensions)和集合推导(Set Comprehensions)不仅能够显著提升代码的可读性,还能在处理数据时大大增强性能。本篇推文将深入探讨这三大推导式的精髓,通过丰富示例,让你在实战中领略它们的魅力。

列表推導:簡潔建構清單的魔法

列表推導式是Python中構造列表最直觀且有效率的方式。它允許你在一行程式碼中完成循環、條件判斷、以及新元素的生成。

基礎範例:平方數生成

squares = [x**2 for x in range(1, 6)]
print(squares)  # 输出:[1, 4, 9, 16, 25]
  • 1.
  • 2.

條件過濾:篩選偶數

even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 输出:[0, 2, 4, 6, 8]
  • 1.
  • 2.

嵌套循環:矩陣轉置

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed)  # 输出:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  • 1.
  • 2.
  • 3.

字典推導:建構映射的藝術

字典推導允許你快速建立字典,其中每個鍵值對都是根據表達式計算得出的。

基礎範例:字母計數

word = "comprehension"
char_count = {char: word.count(char) for char in set(word)}
print(char_count)  # 输出:{'c': 1, 'o': 2, 'm': 1, 'p': 1, 'r': 2, 'e': 2, 'h': 1, 'n': 1, 's': 1, 'i': 1, 't': 1}
  • 1.
  • 2.
  • 3.

條件過濾:年齡分類

people = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}]
age_groups = {person["name"]: "adult" if person["age"] >= 18 else "minor" for person in people}
print(age_groups)  # 输出:{'Alice': 'adult', 'Bob': 'adult', 'Charlie': 'adult'}
  • 1.
  • 2.
  • 3.

集合推導:去重與集合運算

集合推導提供了創建集合的便捷方式,尤其擅長於去重和執行集合間的操作。

去重並平方

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = {x**2 for x in numbers}
print(unique_squares)  # 输出:{1, 4, 9, 16, 25}
  • 1.
  • 2.
  • 3.

交集與平方

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
common_squares = {x**2 for x in set1 & set2}
print(common_squares)  # 输出:{9, 16}
  • 1.
  • 2.
  • 3.
  • 4.

進階技巧:嵌套與鍊式推導

推導式可以相互嵌套,甚至與條件式相結合,實現複雜的邏輯。

嵌套列表推導:矩陣乘法

matrix_a = [[1, 2], [3, 4]]
matrix_b = [[5, 6], [7, 8]]
result = [[sum(a*b for a, b in zip(row_a, col_b)) for col_b in zip(*matrix_b)] for row_a in matrix_a]
print(result)  # 输出:[[19, 22], [43, 50]]
  • 1.
  • 2.
  • 3.
  • 4.

鍊式推導:複雜轉換

data = [("apple", 2), ("banana", 4), ("cherry", 1)]
fruits_sorted_by_count = sorted(
    (fruit for fruit, count in data),
    key=lambda pair: pair[1],
    reverse=True
)
print(fruits_sorted_by_count)  # 输出:['banana', 'apple', 'cherry']
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

結語

列表推導、字典推導與集合推導是Python語言中不可或缺的精華部分,它們以簡潔而強大的表達形式,極大提升了編碼效率和代碼的可讀性。透過上述範例,希望能幫助你深入理解這三大推導式的應用,讓它們成為你程式設計旅途中的得力助手。在日常程式設計實踐中不斷探索,你會發現更多巧妙的使用場景,進一步提升程式碼的效能與美感。