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}
相关推荐
X56615 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
ZhengEnCi5 小时前
03ab-PyTorch安装教程 📚
python
狐狐生风6 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风6 小时前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
老前端的功夫7 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin5211237 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai7 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw07 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据7 小时前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
风之所往_9 小时前
Python 3.0 新特性全面总结
python