简介
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
| 推导式类型 | 语法 | 返回类型 |
|---|---|---|
| 元组推导式 | (表达式 for 变量 in 可迭代对象 ) 或 (表达式 for 变量 in 可迭代对象 if 条件) |
generator |
| 列表推导式 | [表达式 for 变量 in 可迭代对象] 或 [表达式 for 变量 in 可迭代对象 if 条件] |
list |
| 字典推导式 | {键表达式: 值表达式 for 变量 in 可迭代对象} 或 {键表达式: 值表达式 for 变量 in 可迭代对象 if 条件} |
dict |
| 集合推导式 | { 表达式 for 变量 in 可迭代对象} 或 {表达式 for 变量 in 可迭代对象 if 条件} |
set |
元组推导式
# 列表推导式(立即创建所有元素)
squares_list = [x**2 for x in range(1000000)] # 占用大量内存
# 元组表达式(惰性计算)
squares_gen = (x**2 for x in range(1000000)) # 几乎不占用内存
# 使用元组
for square in squares_gen:
if square > 100:
break
print(square)
# 求和
total = sum(x**2 for x in range(100))
print(total) # 328350
# 矩阵转置
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transpose)
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# 展平二维列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式
# 普通方法
squares = []
for i in range(1, 6):
squares.append(i**2)
print(squares) # [1, 4, 9, 16, 25]
# 列表推导式
squares = [i**2 for i in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
#带条件推导式
# 过滤偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers) # [2, 4, 6, 8, 10]
# 条件表达式(三元运算符)
results = [x if x % 2 == 0 else "奇数" for x in range(1, 6)]
print(results) # ['奇数', 2, '奇数', 4, '奇数']
#嵌套循环
# 生成坐标对
coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
# 九九乘法表
multiplication = [f"{i}×{j}={i*j}" for i in range(1, 10) for j in range(1, i+1)]
# 去除空格和空字符串
raw_data = [" apple ", "banana", "", " cherry ", " ", "date"]
cleaned = [item.strip() for item in raw_data if item.strip()]
print(cleaned) # ['apple', 'banana', 'cherry', 'date']
#嵌套推导式
# 矩阵转置
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transpose)
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# 展平二维列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
字典推导式
# 创建平方字典
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 交换键值对
original = {"a": 1, "b": 2, "c": 3}
swapped = {value: key for key, value in original.items()}
print(swapped) # {1: 'a', 2: 'b', 3: 'c'}
# 过滤字典
scores = {"张三": 85, "李四": 92, "王五": 78, "赵六": 95}
passed = {name: score for name, score in scores.items() if score >= 80}
print(passed) # {'张三': 85, '李四': 92, '赵六': 95}
# 处理字符串列表
fruits = ["apple", "banana", "cherry"]
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
print(fruit_lengths) # {'apple': 5, 'banana': 6, 'cherry': 6}
# 成绩统计
scores = {"张三": 85, "李四": 92, "王五": 78, "赵六": 95, "孙七": 88}
# 优秀学生(>=90)
excellent = {name: score for name, score in scores.items() if score >= 90}
print(excellent) # {'李四': 92, '赵六': 95}
# 成绩等级转换
grades = {name: "优秀" if score >= 90 else "良好" if score >= 80 else "及格"
for name, score in scores.items()}
print(grades)
集合推导式
# 创建平方集合(自动去重)
squares = {x**2 for x in range(-3, 4)}
print(squares) # {0, 1, 4, 9}
# 提取字符串中的元音字母
text = "Hello World"
vowels = {char.lower() for char in text if char.lower() in "aeiou"}
print(vowels) # {'e', 'o'}
# 去重并转换
numbers = [1, 2, 2, 3, 3, 3, 4, 5, 5]
unique_even = {x for x in numbers if x % 2 == 0}
print(unique_even) # {2, 4}
# 找出两个列表的共同元素
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common = {x for x in list1 if x in list2}
print(common) # {4, 5}