Python学习之-推导式

前言:

什么是推导式?
Python的推导式(comprehension)是一种简洁、灵活的构建序列(如列表、字典、集合)的方法。推导式常用于根据某个序列或可迭代对象来创建新的序列,遵循特定的规则或应用函数。Python支持的推导式主要有三种:列表推导式(list comprehension)、字典推导式(dictionary comprehension)、集合推导式(set comprehension)。

1.列表推导式 (List Comprehension)

[expression for item in iterable if condition]

这将为每个item创建一个列表,该item来自于iterable(一个可以迭代的对象,比如列表、元组、字符串等),并且满足condition条件的情况下,将expression的结果作为新列表的元素。

1.1 举例:

1.1.1 生成一个包含1到10各个整数平方的列表
squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

输出:
在这里插入图片描述

1.1.2 列表推导式中带if判断的例子
# 生成一个新列表,包含原列表中所有非负数
original_numbers = [1, -1, 2, -2, 3, -3]
non_negative_numbers = [x for x in original_numbers if x >= 0]
print(non_negative_numbers)  # 输出: [1, 2, 3]

输出:
在这里插入图片描述

2.字典推导式 (Dictionary Comprehension)

字典推导式用于创建字典,并且它的结构如下:

{key_expression: value_expression for item in iterable if condition}

这将为每个item创建一个字典项,其中key_expression用于生成键,value_expression用于生成值。

2.1 举例:

# 将一个字符串中字符及其对应的ASCII值作为键值对添加到字典中
chars = 'abc'
ascii_values = {char: ord(char) for char in chars}
print(ascii_values)  # 输出: {'a': 97, 'b': 98, 'c': 99}

输出:
在这里插入图片描述

2.2 字典推导式中带if的判断的例子:
# 原始的学生成绩字典
grades = {'Alice': 89,'Bob': 72,'Charlie': 59,'Diana': 65,'Eva': 55
}# 使用字典推导式创建一个新字典,只包含及格的学生
passing_grades = {student: score for student, score in grades.items() if score >= 60}
print(passing_grades)  # 输出: {'Alice': 89, 'Bob': 72, 'Diana': 65}

输出:
在这里插入图片描述

3.集合推导式 (Set Comprehension)

集合推导式用于创建集合,其结构与列表推导式相似:

{expression for item in iterable if condition}

与列表推导式不同的是,集合推导式会生成一个集合,集合内的元素是唯一的。

3.1 举例:

# 生成一个包含某个列表中各个元素平方的集合
numbers = [1, 2, 2, 3, 4, 4, 4]
unique_squares = {x**2 for x in numbers}
print(unique_squares)  # 输出: {16, 1, 4, 9}

输出:
在这里插入图片描述

总结

优点:
简洁性:推导式可以用单行代码替代多行的循环语句,从而使代码更加简洁、清晰。
易读性:对于熟悉Python语言的开发者来说,推导式提供了一种容易理解并且直观表达序列操作的方法。
性能:推导式通常比等价的循环语句执行得更快,因为它们是优化过的内建操作。
表达力:推导式允许开发者编写出表达性强的代码,很容易将算法或逻辑表达为一个简洁的构造。
灵活性:推导式可以嵌套使用,允许进行复杂的计算。
缺点:
可读性:对于不熟悉推导式的人来说,过于复杂的推导式可能难以理解,从而降低代码的可读性。
滥用:推导式很容易被滥用,尤其是嵌套推导式,可能导致代码难以维护。
内存消耗:列表推导式会产生完整的列表,如果数据集很大,可能会占用大量内存。在这种情况下,使用生成器表达式(generator expression)可能会是更好的选择,因为生成器表达式是惰性求值的。
调试难度:推导式是一个单行构造,这可能使得调试变得困难,因为不能在推导式内部设置断点。
限制:推导式虽然强大,但并不总是适应所有情况。当逻辑变得过于复杂,需要多个嵌套循环或多个条件判断时,使用传统循环可能会更加合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905445.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…

Xilinx IDDR及ODDR使用和仿真

平台:Vivado2018 官方相关文档,ug471_7Series_SelectIO.pdf 关于IDDR与ODDR Input DDR Resource(IDDR) 外部的数据在时钟的上下沿同时传输数据,我们可以使用IDDR原语将输入的单bit数据转化为2bit的数据输出。同时数据速率变为原来的二分之一…

基于java+springboot+vue实现的宠物领养救助平台(文末源码+Lw+ppt)23-363

摘 要 宠物领养救助平台采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户、…

N5230A安捷伦N5230A网络分析仪

181/2461/8938产品概述: Agilent N5230A 网络分析仪提供了速度和精度的卓越组合,用于测量多端口和平衡组件,例如高达 50 GHz 的滤波器、双工器和射频模块(取决于选件)。Agilent N5230A 分析仪的自动端口扩展功能可自动…

物联网实战--入门篇之(一)物联网概述

目录 一、前言 二、知识梳理 三、项目体验 四、项目分解 一、前言 近几年很多学校开设了物联网专业,但是确却地讲,物联网属于一个领域,包含了很多的专业或者说技能树,例如计算机、电子设计、传感器、单片机、网…

小米汽车正式发布:开启智能电动新篇章

随着科技的不断进步,汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向,正吸引着越来越多的目光。在这个充满机遇和挑战的时代,小米汽车凭借其卓越的技术实力和深厚的市场底蕴,终于迈出了坚实的一步。今天&…

C语言 | qsort()函数使用

目录: 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组&#x…

最新2024年增强现实(AR)营销指南(完整版)

AR营销是新的最好的东西,就像元宇宙和VR营销一样。利用AR技术开展营销活动可以带来广泛的利润优势。更不用说,客户也喜欢AR营销! 如果企业使用AR,71%的买家会更多地购物。40%的购物者准备在他们可以在AR定制的产品上花更多的钱。…

unity3d for web

时光噶然 一晃好多年过去了(干了5年的u3d游戏),记得最后一次使用的版本好像是 unity 2017。 那个是 unity3d for webgl 还需要装个插件。用起来很蛋疼。 最近做一个小项目 在选择是用 Layabox 还是 cocosCreate 的时候 我想起了老战友 Uni…

HTTP,Servlet

HTTP 概念:HyperTextTransferProtocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 HTTP协议特点: 1.基于TCP协议:面向连接,安全 2.基于请求-响应模型的:一次请求对应一次响应 …

iOS网络抓包工具在移动应用开发中的关键作用与应用

摘要 本文将深入探讨iOS平台上常用的网络抓包工具,包括Charles、克魔助手、Thor和Http Catcher,以及通过SSH连接进行抓包的方法。此外,还介绍了克魔开发助手作为iOS应用开发的辅助工具,提供的全方面性能监控和调试功能。 在iOS应…

【塑料烧杯】PTFE带把手耐强酸碱四氟烧杯可灵活加工

PTFE烧杯,也叫四氟烧杯,需在石棉网上使用,不可直接接触明火、传热性能好、耐腐蚀、内壁光滑。搭配防腐电热板、赶酸电热板后期赶酸使用效果更佳。 可灵活加工各种规格形状四氟烧杯,也可以单独配盖子。 PTFE 规格参考:…

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片

一、后端直接返回图片url 当图片字段接口直接返回的是图片url&#xff0c;可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…

fastadmin学习05-开启debug以及配置

FastAdmin 框架提供了对 .env 环境变量配置的支持&#xff0c;并附带一个默认示例文件 .env.sample。在安装后&#xff0c;框架并不会自动启用 env 环境变量&#xff0c;需要手动将 .env.sample 复制为 .env 并进行配置。 如果不开启.env会读取database.php中的配置 下面测试…

Web Components使用(一)

在使用Web Components之前&#xff0c;我们先看看上一篇文章Web Components简介&#xff0c;其中提到了相关的接口、属性和方法。 正是这些接口、属性和方法才实现了Web Components的主要技术&#xff1a;Custom elements&#xff08;自定义元素&#xff09;、Shadow DOM&#…

浅谈WPF之属性系统

在WPF开发中&#xff0c;经常听到各种属性&#xff0c;如&#xff1a;依赖属性&#xff0c;附加属性&#xff0c;CLR属性&#xff0c;那这些不同类型的属性&#xff0c;具体又有什么作用呢&#xff1f;今天以一些简单的小例子&#xff0c;简述一下WPF开发中&#xff0c;各种属性…

STM32G473之flash存储结构汇总

STM32G4系列单片机&#xff0c;为32位的微控制器&#xff0c;理论上其内部寄存器地址最多支持4GB的命名及查找&#xff08;2的32次方&#xff0c;地址命名为0x00000000至0xFFFFFFFF&#xff09;。STM32官方对4GB的地址存储进行编号时&#xff0c;又分割成了8个block区域&#x…

【MATLAB源码-第22期】基于matlab的手动实现的(未调用内置函数)CRC循环码编码译码仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 循环码是线性分组码的一种&#xff0c;所以它具有线性分组码的一般特性&#xff0c;此外还具有循环性。循环码的编码和解码设备都不太复杂&#xff0c;且检(纠)错能力强。它不但可以检测随机的错误&#xff0c;还可以检错突发…

day72Html

常用标签&#xff1a; 分类&#xff1a; 块级标签&#xff1a;独立成行 行级标签&#xff1a;不独立成行&#xff0c;同一行可放多个行级标 注意网页显示时&#xff0c;忽略空白字符,(回车符&#xff0c;空格&#xff0c;tab制表符&#xff09; 一&#xff09;块级标签&#xf…

Linux——信号的保存与处理

目录 前言 一、信号的常见概念 1.信号递达 2.信号未决 3.信号阻塞 二、Linux中的递达未决阻塞 三、信号集 四、信号集的处理 1.sig相关函数 2.sigprocmask()函数 3.sigpending()函数 五、信号的处理时机 六、信号处理函数 前言 在之前&#xff0c;我们学习了信号…