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}
相关推荐
全栈练习生9 小时前
AI Agent 沙箱
python·ai
SEO_juper10 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户83562907805111 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
for_ever_love__11 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户83562907805111 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_4617694012 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_9669496512 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿12 小时前
Python实战第1期:Python环境搭建与第一个程序
python
心易行者12 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
weixin1997010801612 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存