Python 列表推導式與集合推導式:異同與應用場景
列表推導式和集合推導式是 Python 中非常強大的工具,可以讓你以簡潔的方式創建列表和集合。它們在語法上非常相似,但有一些重要的區別。本文將詳細介紹列表推導式和集合推導式的基本概念、語法、應用場景以及它們之間的異同點。
1. 列表推導式
(1) 基本概念
列表推導式是一種快速創建列表的方法。它允許你在一行代碼中生成一個新的列表,而不需要使用傳統的 for 循環。
(2) 語法
new_list = [expression for item in iterable if condition]
- expression:對每個元素執行的操作。
- item:迭代變量。
- iterable:可迭代對象(如列表、元組、字符串等)。
- if condition:可選的條件語句,用于過濾元素。
(3) 示例
假設我們有一個列表,包含一些數字,我們想創建一個新的列表,其中只包含偶數:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # 輸出: [2, 4, 6, 8, 10]
2. 集合推導式
(1) 基本概念
集合推導式類似于列表推導式,但它用于創建集合而不是列表。集合中的元素是唯一的,沒有重復項。
(2) 語法
new_set = {expression for item in iterable if condition}
- expression:對每個元素執行的操作。
- item:迭代變量。
- iterable:可迭代對象(如列表、元組、字符串等)。
- if condition:可選的條件語句,用于過濾元素。
(3) 示例
假設我們有一個列表,包含一些數字,我們想創建一個新的集合,其中只包含偶數:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10]
even_numbers_set = {num for num in numbers if num % 2 == 0}
print(even_numbers_set) # 輸出: {2, 4, 6, 8, 10}
3. 列表推導式與集合推導式的異同
相同點:
- 語法結構相似,都包含表達式、迭代變量、可迭代對象和條件語句。
- 都可以用于快速生成新的數據結構。
- 都支持嵌套推導式。
不同點:
- 數據結構:列表推導式生成的是列表,集合推導式生成的是集合。
- 唯一性:集合中的元素是唯一的,而列表中的元素可以重復。
- 順序:列表保持插入順序,集合不保證順序。
4. 應用場景
列表推導式:
- 數據處理:快速生成新的列表,例如過濾、轉換數據。
- 性能優化:相比傳統的 for 循環,列表推導式通常更高效。
集合推導式:
- 去重:快速去除重復元素。
- 集合操作:進行集合運算,如并集、交集、差集等。
5. 實踐示例
(1) 列表推導式示例
假設我們有一個列表,包含一些字符串,我們想創建一個新的列表,其中每個字符串都被轉換為大寫:
words = ['apple', 'banana', 'cherry']
upper_words = [word.upper() for word in words]
print(upper_words) # 輸出: ['APPLE', 'BANANA', 'CHERRY']
(2) 集合推導式示例
假設我們有兩個列表,分別包含一些數字,我們想找到兩個列表中的公共元素:
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common_elements = {num for num in list1 if num in list2}
print(common_elements) # 輸出: {4, 5}
6. 實戰案例
假設我們有一個包含多個子列表的列表,每個子列表代表一個學生的成績記錄。我們想找出所有學生的最高分,并統計每個最高分出現的次數。
# 學生成績記錄
grades = [
[85, 90, 92],
[78, 88, 95],
[92, 98, 89],
[88, 92, 95],
[90, 95, 98]
]
# 使用列表推導式找到每個學生的最高分
highest_grades = [max(student) for student in grades]
print(highest_grades) # 輸出: [92, 95, 98, 95, 98]
# 使用集合推導式找到所有不同的最高分
unique_highest_grades = {grade for grade in highest_grades}
print(unique_highest_grades) # 輸出: {92, 95, 98}
# 統計每個最高分出現的次數
from collections import Counter
grade_counts = Counter(highest_grades)
print(grade_counts) # 輸出: Counter({95: 2, 98: 2, 92: 1})
總結
本文詳細介紹了 Python 中的列表推導式和集合推導式,包括它們的基本概念、語法、應用場景以及它們之間的異同點。通過具體的示例和實戰案例,展示了如何在實際開發中靈活運用這兩種強大的工具。