首页 > 编程语言 >python——推导式

python——推导式

时间:2024-09-05 18:21:02浏览次数:9  
标签:推导 16 python 36 列表 print squares

推导式(Comprehensions)是Python中用于创建集合、列表、字典和集合的简洁语法。它们通过简化代码使其更具可读性,并且通常比使用传统循环创建对象的方式更高效。推导式有助于减少代码行数并提高代码的清晰度。

1. 推导式的基本概念

推导式的基本思想是通过提供一个表达式和一个或多个for循环(可选的if语句)来创建新的集合。主要的推导式类型包括列表推导式、集合推导式和字典推导式。

2. 列表推导式(List Comprehension)

基本语法
[expression for item in iterable if condition]
  • expression:要创建的元素或表达式。
  • item:当前从iterable中取出的元素。
  • iterable:可以迭代的对象,如列表、元组、字符串等。
  • condition(可选):过滤条件,仅当满足条件时才包括item
示例
  1. 基本示例

    创建一个包含0到9的平方数的列表。

    squares = [x**2 for x in range(10)]
    print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  2. 带条件的推导式

    创建一个包含0到9中偶数平方数的列表。

    even_squares = [x**2 for x in range(10) if x % 2 == 0]
    print(even_squares)  # 输出: [0, 4, 16, 36, 64]
    
  3. 嵌套推导式

    扁平化一个二维列表。

    matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
    flat = [num for row in matrix for num in row]
    print(flat)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

3. 集合推导式(Set Comprehension)

集合推导式与列表推导式类似,但创建的是集合。

基本语法
{expression for item in iterable if condition}
示例
  1. 基本示例

    创建一个包含0到9的平方数的集合。

    squares_set = {x**2 for x in range(10)}
    print(squares_set)  # 输出: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
    
  2. 带条件的推导式

    创建一个包含0到9中偶数平方数的集合。

    even_squares_set = {x**2 for x in range(10) if x % 2 == 0}
    print(even_squares_set)  # 输出: {0, 4, 16, 36, 64}
    

4. 字典推导式(Dictionary Comprehension)

字典推导式用于创建字典。

基本语法
{key_expression: value_expression for item in iterable if condition}
示例
  1. 基本示例

    创建一个字典,其中键是0到9,值是其平方数。

    squares_dict = {x: x**2 for x in range(10)}
    print(squares_dict)  # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    
  2. 带条件的推导式

    创建一个字典,其中键是0到9中偶数,值是其平方数。

    even_squares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
    print(even_squares_dict)  # 输出: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
    

5. 推导式的使用场景

  1. 数据转换:将数据从一种形式转换为另一种形式,例如将列表中的元素进行平方操作。
  2. 过滤数据:从一个数据集中过滤出符合条件的元素,例如仅保留偶数。
  3. 扁平化数据:将嵌套的数据结构(如列表中的列表)转换为一维结构。
  4. 生成字典:根据某些规则生成键值对,如从列表生成一个键值对字典。

6. 使用技巧和高阶用法

  1. 多重循环:可以在推导式中使用多个for循环来处理复杂的数据结构。

    matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
    flattened_and_squared = [x**2 for row in matrix for x in row]
    print(flattened_and_squared)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  2. 与函数结合使用:可以将推导式与函数结合,进行更复杂的数据处理。

    def process(x):
        return x**2
    
    numbers = [1, 2, 3, 4]
    processed_numbers = [process(x) for x in numbers]
    print(processed_numbers)  # 输出: [1, 4, 9, 16]
    
  3. 生成器表达式:与推导式类似,但不创建完整的列表,而是生成一个生成器对象,节省内存。

    gen_expr = (x**2 for x in range(10))
    for val in gen_expr:
        print(val)  # 输出: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
    
  4. 避免过于复杂的推导式:当推导式的逻辑过于复杂时,可能会导致代码可读性下降。此时,可以考虑将推导式分解为多个步骤或使用传统的循环方式。

推导式在数据处理和转换中非常强大,但在使用时应确保代码的可读性。如果遇到复杂情况,考虑使用传统循环和函数进行处理。

标签:推导,16,python,36,列表,print,squares
From: https://blog.csdn.net/pumpkin84514/article/details/141506001

相关文章

  • python——表格在Excle和Word之间的转换
    如何在Python中将Word中的表格写入Excel,以及如何将Excel中的数据写入Word。我们将使用python-docx和openpyxl这两个库来完成这项任务。1.将Word中的表格写入Excel1.1安装所需库首先,确保安装了python-docx和openpyxl:pipinstallpython-docxopenpyxl1.2从Wo......
  • python_August(迭代器、生成式)
    目录迭代器三元表达式列表推导式字典生成器拉链函数迭代器可迭代对象:只要拥有iter方法的对象就是可迭代对象,下面的除了前两个,从字符串开始都是可迭代对象height=180 #整型salary=3.2 #浮点型name='nick' #字符串hobby_list1=['run','read'] #列表hobby_tup=......
  • 再也不怕深夜emo的时候没会员了,无敌Python只需20行代码,轻松爬取网易云排行榜热门音乐!
    再也不怕深夜emo的时候没会员了,无敌Python只需20行代码,轻松爬取网易云排行榜热门音乐!让我们直接开始本次操作吧!importrandomimporttimeimportexecjsimportrequestsimportre"""发送请求:模拟浏览器对于url地址发送请求"""#模拟浏览器headers={'User-Agent'......
  • 20240905_154516 python 填空题 字符串方法2
    有字符串列表li=["a","b","c"],让列表成员用+拼接,保存给变量rr="+".join(li)有字符串s,把它的内容变成小写,保存给变量rr=s.lower()有字符串s,把它内部的java全替换为python,保存结果给变量rr=s.replace("java","python")有字符串s="abc",请把它按空符号进行分割,得......
  • SVI pyro 随机变分推理的提示和技巧 ,贝叶斯神经网络 bnn pytorch python
    SVI第四部分:提示和技巧¶pyro.ai/examples/svi_part_iv.html导致这一个的三个SVI教程(第一部分, 第二部分,& 第三部分)通过使用Pyro做变分推断所涉及的各个步骤。在这个过程中,我们定义了模型和指南(即,变分分布),设置了变分目标(特别是埃尔博斯),以及构造的优化器(pyro.opti......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校知识共享系统等问题,对高校知识共享系统进行研究分析,然后开发设计出高校知识共享系统以......
  • python+flask实现用户登录界面
    简介        用户输入用户名和密码,此时系统进行核对,如果输入错误,则进行提示;否则登录系统功能界面。前端界面设计,登录界面的示例如下:1)实现前端设计,命名为login.html,前端代码如下所示:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><titl......
  • 基于 Python 的地址解析:自动识别姓名、电话、地址、详细地址与省市区
    随着电子商务和物流行业的蓬勃发展,自动化处理客户提供的收货信息变得尤为重要。在用户下单时,通常需要输入姓名、电话、地址等信息,但由于输入格式不统一,手动处理这些数据十分繁琐且容易出错。因此,利用Python自动解析用户输入的地址信息,提取姓名、电话、详细地址和省市区成为了许多......
  • 基于SA-BP模拟退火算法优化BP神经网络实现数据预测Python实现
        在数据分析和机器学习领域,时间序列预测和多输入单输出系统的预测是重要且复杂的问题。传统的BP(反向传播)神经网络虽然具有强大的非线性函数逼近能力,但在处理这些问题时容易陷入局部极小值、训练速度慢以及过拟合等问题。为了克服这些不足,我们引入了SA-BP(模拟退火算法......
  • Biome-BGC生态系统模型与Python融合技术实践应用
    Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数,模拟日尺度碳、水和氮通量的有效模型,其研究的空间尺度可以从点尺度扩展到陆地生态系统。在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天的初级生产力(GPP),将生长呼吸和维持呼吸减去后的产物......