当前位置: 首页 > news >正文

Python推导式详解与应用

Python 推导式详解

推导式(Comprehension)是 Python 中一种简洁、高效的数据结构构建方式,可以用更少的代码创建列表、字典、集合等。

1. 列表推导式 (List Comprehension)

基本语法

[expression for item in iterable]

示例

# 传统方式
squares = []
for i in range(5):squares.append(i**2)
print(squares)  # [0, 1, 4, 9, 16]# 列表推导式
squares = [i**2 for i in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

带条件的列表推导式

# 只包含偶数的平方
even_squares = [i**2 for i in range(10) if i % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]# 条件表达式
results = ["偶数" if i % 2 == 0 else "奇数" for i in range(5)]
print(results)  # ['偶数', '奇数', '偶数', '奇数', '偶数']

多重循环

# 两个列表的组合
pairs = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(pairs)  # [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

2. 字典推导式 (Dictionary Comprehension)

基本语法

{key_expression: value_expression for item in iterable}

示例

# 创建数字与其平方的字典
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# 转换字典的键值对
original = {'a': 1, 'b': 2, 'c': 3}
swapped = {v: k for k, v in original.items()}
print(swapped)  # {1: 'a', 2: 'b', 3: 'c'}# 带条件的字典推导式
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)  # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

3. 集合推导式 (Set Comprehension)

基本语法

{expression for item in iterable}

示例

# 创建唯一平方数的集合
squares_set = {x**2 for x in [1, -1, 2, -2, 3]}
print(squares_set)  # {1, 4, 9}# 从字符串中提取唯一字符
unique_chars = {char for char in "hello world" if char != ' '}
print(unique_chars)  # {'h', 'e', 'l', 'o', 'w', 'r', 'd'}

4. 生成器表达式 (Generator Expression)

基本语法

(expression for item in iterable)

示例

# 生成器表达式 - 惰性求值,节省内存
squares_gen = (x**2 for x in range(5))
print(squares_gen)  # <generator object <genexpr> at 0x...># 使用生成器
for square in squares_gen:print(square, end=' ')  # 0 1 4 9 16# 生成器只能使用一次
print(list(squares_gen))  # [] - 已耗尽

5. 嵌套推导式

示例

# 创建二维列表
matrix_2d = [[i * 3 + j for j in range(3)] for i in range(3)]
print(matrix_2d)  # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]# 展平二维列表
flattened = [num for row in matrix_2d for num in row]
print(flattened)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]

6. 实际应用示例

数据清洗

# 清洗字符串列表
words = [" hello ", " WORLD", "  python  "]
cleaned = [word.strip().lower() for word in words]
print(cleaned)  # ['hello', 'world', 'python']

文件处理

# 读取文件并处理行
# lines = [line.strip() for line in open('file.txt') if line.strip()]

复杂数据处理

# 处理嵌套数据结构
data = [{'name': 'Alice', 'scores': [85, 90, 78]},{'name': 'Bob', 'scores': [92, 88, 95]}]# 提取所有分数
all_scores = [score for student in data for score in student['scores']]
print(all_scores)  # [85, 90, 78, 92, 88, 95]# 计算每个学生的平均分
averages = {student['name']: sum(student['scores'])/len(student['scores']) for student in data}
print(averages)  # {'Alice': 84.333, 'Bob': 91.667}

7. 性能考虑

import time# 比较传统循环与推导式的性能
def traditional_way(n):result = []for i in range(n):if i % 2 == 0:result.append(i**2)return resultdef comprehension_way(n):return [i**2 for i in range(n) if i % 2 == 0]# 对于大数据集,推导式通常更快
n = 1000000start = time.time()
traditional_way(n)
print(f"传统方式: {time.time() - start:.4f}秒")start = time.time()
comprehension_way(n)
print(f"推导式: {time.time() - start:.4f}秒")

8. 最佳实践

  1. 保持简洁:如果推导式太长或太复杂,考虑使用传统循环
  2. 可读性优先:不要为了简洁而牺牲代码可读性
  3. 避免副作用:推导式主要用于数据转换,避免在其中执行复杂操作
  4. 考虑内存:对于大数据集,考虑使用生成器表达式

推导式是 Python 中非常强大的特性,合理使用可以让代码更加简洁、高效和易读!

http://www.dtcms.com/a/440426.html

相关文章:

  • 自建网站做跨境电商学网站建设需要什么软件有哪些
  • 安徽建设干部学校网站首页开源软件
  • 网站开发项目实战黄骅港防疫办电话
  • 烟台建设用地规划查询网站云主机 多个网站
  • 网站聊天系统怎么做做一个自适应网站多少钱
  • 华为商城网站设计如何查看网站的服务器位置
  • 公司网站建设费计入什么科目seo优化实训内容
  • 不属于营销型网站的特点山东网站seo开发
  • 网站制作费用大概多少永州网站建设gwtcms
  • 坪地网站建设包括哪些龙岩全网搜系统开发
  • 英国设计网站海南学校网站建设
  • 雅安建设机械网站网店美工的意义
  • 网站应该注意什么4徐汇区网站建设
  • 建设网站建设哪家快万户网络学校网站建设
  • phpstorm网站开发广州品牌网络营销方式
  • 怎样建设智能网站网站信息服务费怎么做分录
  • 模板网站建设青岛怎么做网站快照
  • 5. Pandas 缺失值与异常值处理
  • 网站集约建设后网站域名规范企业培训机构排名前十
  • 做教育集团的网站企业网站建设示范平台
  • 济南网站建设策划方案濮阳网站建设 公司名字
  • 深圳市宝安区住房和建设局网站可以做动漫的网站有哪些
  • 吉林建设厅官方网站头条号权重查询
  • 麓谷网站建设学科建设网站
  • 济南手机建站价格汕头市城市建设总公司网站
  • 公司网站建设设计公司哪家好电子版简历免费的
  • 库存网站建设定制二学一做网站
  • 魔方网站建设辽宁建设工程信息网老网站
  • 绍兴网站建设报价做微商如何引流推广怎么找客源
  • php和html5做网站国外网站素材