python推导式

简介

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}
相关推荐
Shine_1804182 小时前
ClaudeCode启动报错
python
福运常在2 小时前
股票数据API(14)股票近年增发数据
java·python·maven
Zhansiqi10 小时前
day42部分题目
python
小王不爱笑13210 小时前
IO 模型
开发语言·python
kishu_iOS&AI10 小时前
Conda 简要说明与常用指令
python·安全·conda
小陈工10 小时前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
知我Deja_Vu10 小时前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
njidf10 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
呆呆小孩10 小时前
Anaconda 被误删抢救手册:从绝望到重生
python·conda