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}
相关推荐
聪明蛋子哟19 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust
今天AI了吗20 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
卷无止境20 小时前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像
后端·python·docker
TELL52120 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
Csvn21 小时前
🐍 Day 4: Python 控制流 — 条件、循环与推导式的艺术
后端·python
大鹏说大话1 天前
从爬虫到决策引擎:大数据下自媒体如何用Python挖掘用户痛点
开发语言·爬虫·python
Niuguangshuo1 天前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
2501_944676161 天前
揭秘!WORDTIP公司靠不靠谱?小白必看
大数据·人工智能·python
Minner-Scrapy1 天前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
CODER03041 天前
Anaconda和Mamba创建环境管理包常用命令合集
python·深度学习·conda·虚拟环境·mamba·常用命令大全