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

(6)100天python从入门到拿捏《推导式》

推导式

Python 中的推导式是 Python 提供的一种简洁、优雅的语法,用于生成或操作集合如列表、字典、集合等。推导式通过简化循环和条件判断的写法,使得代码更加简洁易读。Python 中常见的推导式有:列表推导式字典推导式集合推导式生成器推导式

文章目录

  • 推导式
      • 1. 列表推导式
      • 2. 字典推导式
      • 3. 集合推导式
      • 4. 元组推导式(生成器推导式)
      • 5. 推导式的嵌套
      • 6. 推导式的性能
      • 总结

1. 列表推导式

列表推导式用于根据某种规则从现有的可迭代对象中生成新列表。它通常包含一个表达式和一个可迭代对象。

语法:

[expression for item in iterable if condition]
  • expression用于生成元素的表达式
  • item:可迭代对象中的每个元素。
  • iterable:可以迭代的对象如列表、字符串等。
  • condition(可选):一个条件表达式,用于过滤列表中不符合条件的值。

示例

  1. 生成一个包含 0 到 9 的列表

    numbers = [x for x in range(10)]
    print(numbers)
    

    输出

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  2. 生成一个包含偶数的列表

    even_numbers = [x for x in range(10) if x % 2 == 0]
    print(even_numbers)
    

    输出

    [0, 2, 4, 6, 8]
    
  3. 生成每个数字的平方

    squares = [x ** 2 for x in range(10)]
    print(squares)
    

    输出

    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

2. 字典推导式

字典推导式用于根据某种规则从现有的数据生成新字典。它的基本语法与列表推导式类似,但每个元素需要包含键值对。

语法:

{key_expression: value_expression for item in iterable if condition}
  • key_expression:键的生成规则。
  • value_expression:值的生成规则。
  • item:可迭代对象中的每个元素。

示例:

  1. 生成一个字典,其中键是数字,值是数字的平方

    square_dict = {x: x ** 2 for x in range(5)}
    print(square_dict)
    

    输出

    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
    
  2. 生成一个字典,过滤掉值小于 5 的项

    number_dict = {x: x ** 2 for x in range(10) if x ** 2 >= 5}
    print(number_dict)
    

    输出

    {3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    

3. 集合推导式

集合推导式用于根据某种规则从现有的数据生成新集合。集合推导式的语法与列表推导式类似,但它生成的是集合,因此集合中的元素是唯一的

语法:

{expression for item in iterable if condition}

示例:

  1. 生成一个包含 0 到 9 中所有偶数的集合

    even_set = {x for x in range(10) if x % 2 == 0}
    print(even_set)
    

    输出

    {0, 2, 4, 6, 8}
    
  2. 去除列表中的重复元素

    numbers = [1, 2, 3, 4, 4, 5, 6, 6]
    unique_numbers = {x for x in numbers}
    print(unique_numbers)
    

    输出

    {1, 2, 3, 4, 5, 6}
    

4. 元组推导式(生成器推导式)

生成器推导式与列表推导式类似,不同的是它生成的是一个生成器对象,而不是一个列表。生成器是惰性求值的,即只有在需要时才会生成值,因此在处理大数据时比列表推导式更加节省内存。

语法:

(expression for item in iterable if condition)

示例:

  1. 生成器推导式生成平方数

    gen = (x ** 2 for x in range(10))
    for num in gen:print(num)
    

    输出

    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
    
  2. 生成器推导式的内存效率
    生成器对象的好处在于它不会一次性将所有元素存储在内存中,而是按需生成值,因此对于大数据集来说非常节省内存。

    # 创建一个生成器
    gen = (x for x in range(1000000))# 仅当需要时才计算和输出
    print(next(gen))  # 输出:0
    print(next(gen))  # 输出:1
    

5. 推导式的嵌套

推导式可以进行嵌套使用,特别是在处理多层嵌套的迭代结构时非常有用。

示例:

  1. 列表推导式嵌套

    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    flattened = [item for row in matrix for item in row]
    print(flattened)
    

    输出

    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  2. 字典推导式嵌套

    names = ["Alice", "Bob", "Charlie"]
    scores = [95, 85, 90]
    name_score_dict = {names[i]: scores[i] for i in range(len(names))}
    print(name_score_dict)
    

    输出

    {'Alice': 95, 'Bob': 85, 'Charlie': 90}
    

6. 推导式的性能

推导式通常比使用显式的 for 循环更快。因为推导式是在一个内存块内完成所有操作,而 for 循环需要通过多次操作来逐步构建结果。因此,推导式在性能上通常更加高效。

总结

Python 中的推导式提供了一种非常优雅和高效的方式来生成或操作集合数据。它能够通过简洁的语法实现复杂的操作,从而提高代码的可读性和执行效率。

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》

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

相关文章:

  • 【数据结构】考研数据结构核心考点:AVL树插入操作深度解析——从理论到实践的旋转平衡实现
  • 遂宁网站建设哪家好网站诊断案例
  • Python访问数据库——使用SQLite
  • 一行配置解决claude code 2.0版本更新后 vscode 插件需要登录的问题
  • 问题:conda创建的虚拟环境打印中文在vscode中乱码
  • vscode 连接 wsl
  • 华为OD机试C卷 - 灰度图存储 - 矩阵 - (Java C++ JavaScript Python)
  • 资源采集网站如何做wap网站使用微信登陆
  • UNIX下C语言编程与实践58-UNIX TCP 连接处理:accept 函数与新套接字创建
  • wordpress博客站点云狄网站建设
  • 智能OCR助力企业办公更高效-发票识别接口-文字识别接口-文档识别接口
  • Spring Boot自动配置:原理、利弊与实践指南
  • HTTPS原理:从证书到加密的完整解析
  • CNN与ANN差异对比
  • 小迪web自用笔记61
  • Docker 公有仓库使用、Docker 私有仓库(Registry)使用总结
  • Comodo HTTPS 在工程中的部署与排查实战(证书链、兼容性与真机抓包策略)
  • 推广网站怎么做能增加咨询免费域名申请与解析
  • ES6开发实案例
  • 使用大模型技术构建机票分销领域人工智能客服助手
  • R语言 读取tsv的三种方法 ,带有注释的tsv文件
  • 淘宝数据网站开发查邮箱注册的网站
  • H200服务器维修服务体系构建:捷智算的全链条保障方案
  • Windows安装RabbitMQ保姆级教程
  • 申请网站服务器网络营销的特点和作用
  • Java-Spring入门指南(二十二)SSM整合前置基础
  • vim 中设置高亮
  • 记一次病毒分析
  • 岳阳网站开发收费亚马逊网站
  • JPA读取数据库离谱问题-No property ‘selectClassByName‘ found-Not a managed type