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

Python(14)推导式

        在 Python 编程中,推导式是一种强大而简洁的语法结构,它能让开发者以简洁的方式从一个数据序列创建另一个新的数据序列。无论是处理列表、字典、集合还是元组,推导式都能大显身手。这篇博客将结合菜鸟教程中的内容,通过丰富的代码示例,深入学习 Python3 推导式,方便日后复习回顾。

一、列表推导式

列表推导式是最常见的推导式之一,它的基本格式有两种:

  • [表达式 for 变量 in 列表]
  • [表达式 for 变量 in 列表 if 条件]

1.1 基础应用:生成新列表

        通过对已有列表元素进行简单运算来生成新列表。例如,将一个包含数字的列表中每个元素都乘以 2:

nums = [1, 2, 3, 4, 5]
new_nums = [num * 2 for num in nums]
print(new_nums) 

        在这段代码中,num * 2是表达式,num是变量,nums是原列表。for num in nums表示对nums中的每个元素进行迭代,将每个元素num代入表达式num * 2,并将结果存储在新列表new_nums中。

1.2 条件筛选:过滤列表元素

        使用条件语句筛选符合特定条件的元素。比如,从一个列表中筛选出所有偶数:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = [num for num in nums if num % 2 == 0]
print(even_nums) 

        这里if num % 2 == 0是条件语句,只有满足该条件(即num是偶数)的元素才会被添加到新列表even_nums中。

1.3 结合函数:灵活处理列表元素

        表达式可以是有返回值的函数。例如,定义一个函数将字符串首字母大写,然后对列表中的字符串元素进行处理:

def capitalize_str(s):return s.capitalize()words = ['python', 'java', 'c++']
new_words = [capitalize_str(word) for word in words]
print(new_words) 

        在这个例子中,capitalize_str(word)作为表达式,对words列表中的每个字符串元素进行处理,生成新的列表new_words


二、字典推导式

字典推导式用于创建字典,基本格式同样有两种:

  • { key_expr: value_expr for value in collection }
  • { key_expr: value_expr for value in collection if condition }

2.1 基础应用:创建键值对字典

        以列表元素为键,元素的某个属性为值创建字典。例如,根据一个包含水果名称的列表,创建一个以水果名称为键,水果名称长度为值的字典:

fruits = ['apple', 'banana', 'cherry']
fruit_dict = {fruit: len(fruit) for fruit in fruits}
print(fruit_dict) 

        在这段代码中,fruit是键表达式,len(fruit)是值表达式,fruits是集合。通过遍历fruits列表,将每个水果名称作为键,其长度作为值,创建了字典fruit_dict

2.2 条件筛选:根据条件创建字典

        使用条件筛选符合要求的元素来创建字典。比如,从一个包含数字的列表中,创建一个以偶数为键,偶数平方为值的字典:

nums = [1, 2, 3, 4, 5, 6]
even_square_dict = {num: num ** 2 for num in nums if num % 2 == 0}
print(even_square_dict) 

        这里if num % 2 == 0是条件语句,只有满足条件的偶数num才会被用于创建字典的键值对,其值为该偶数的平方。


三、集合推导式

集合推导式用于创建集合,基本格式为:

  • { expression for item in Sequence }
  • { expression for item in Sequence if conditional }

3.1 基础应用:生成集合

        对一个可迭代对象中的元素进行运算,生成一个集合。例如,计算一个列表中每个元素的平方,生成一个平方数集合:

nums = [1, 2, 3, 4, 5]
square_set = {num ** 2 for num in nums}
print(square_set) 

        在这段代码中,num ** 2是表达式,num是变量,nums是序列。通过对nums中的每个元素进行平方运算,将结果存储在集合square_set中。由于集合的元素唯一性,重复的平方数只会出现一次。

3.2 条件筛选:筛选集合元素

        根据条件筛选可迭代对象中的元素,生成符合条件的集合。比如,从一个字符串中筛选出不是元音字母的字符集合:

s = 'hello world'
non_vowel_set = {char for char in s if char not in 'aeiou'}
print(non_vowel_set) 

        这里if char not in 'aeiou'是条件语句,只有满足该条件(即字符不是元音字母)的字符才会被添加到集合non_vowel_set中。


四、元组推导式(生成器表达式)

元组推导式(严格来说是生成器表达式)的基本格式为:

  • (expression for item in Sequence )
  • (expression for item in Sequence if conditional )

它与列表推导式类似,但返回的是一个生成器对象。如果需要得到元组,可以使用tuple()函数进行转换。

4.1 基础应用:生成生成器对象

        创建一个生成器对象,用于生成一系列数据。例如,生成 1 到 10 的整数的立方的生成器:

cube_generator = (num ** 3 for num in range(1, 11))
print(cube_generator) 

        这里num ** 3是表达式,num是变量,range(1, 11)是序列。运行代码后,会输出一个生成器对象。如果需要获取生成器中的数据,可以使用循环遍历或转换为元组等方式。

4.2 转换为元组:获取最终元组数据

        将生成器对象转换为元组。例如,将上述生成器对象转换为元组:

cube_tuple = tuple(cube_generator)
print(cube_tuple) 

        运行代码后,cube_tuple就是包含 1 到 10 的整数的立方的元组。


五、总结

        Python3 推导式是一种高效、简洁的数据处理工具,能够帮助开发者快速创建和处理列表、字典、集合和元组。通过合理运用推导式,可以减少代码量,提高代码的可读性和执行效率。在实际编程中,要根据具体需求选择合适的推导式,并注意保持代码的简洁性和可读性。希望这篇博客能帮助你更好地复习和巩固 Python3 推导式的知识,在编程中灵活运用推导式解决各种问题。

相关文章:

Python(14)推导式

在 Python 编程中,推导式是一种强大而简洁的语法结构,它能让开发者以简洁的方式从一个数据序列创建另一个新的数据序列。无论是处理列表、字典、集合还是元组,推导式都能大显身手。这篇博客将结合菜鸟教程中的内容,通过丰富的代码…...

React速通笔记

相关视频: 黑马程序员前端React18入门到实战视频教程,从reacthooks核心基础到企业级项目开发实战(B站评论、极客园项目等)及大厂面试全通关_哔哩哔哩_bilibili 一、React介绍 React由Meta公司开发,是一个用于 构建W…...

深入蜂窝物联网:第二章 深度解读 NB-IoT:协议栈、部署与典型应用

1. NB-IoT 简介与应用场景 NB-IoT(Narrowband-IoT,窄带物联网)是3GPP在LTE演进基础上,为海量低速率IoT设备设计的无线接入技术。它仅占用 200 kHz 或 180 kHz(Guard-band)带宽,通过扩频和重复发射,提高了深度覆盖能力。 典型应用 远程抄表:电表、水表、气表等周期性少…...

处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法

需求:对象有字段A,B,C,需要判断对象之间AB两个字段相同的对象 如: 对象1,Aaaa,Bbbb 对象2,Aaaa,Bbbb 对象3,Abbb,Baaa 对象4,Abbb,Baaa…...

基于SpringBoot的食物营养分析与推荐网站系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

人智交互中的AI世代

人智交互中的AI世代 一、研究背景与意义 1.1 技术演进背景 人工智能技术自1956年达特茅斯会议提出概念以来,经历了多次技术迭代与产业周期。2020年后,以大语言模型(LLMs)和生成式AI(AIGC)为代表的突破性进…...

从Flask到智能体:装饰器模式在AI系统中的架构迁移实践

引言:框架设计中的模式复用 在人工智能系统开发领域,大型语言模型驱动的智能体(LLM Agent)正面临日益复杂的架构挑战。有趣的是,Web开发框架Flask的装饰器模式为此类系统的构建提供了极具启发性的解决方案。本文将深入…...

Docker的常用命令

docker的常用命令 今天来介绍docker的常用命令,非常的详细,请大家看起来! 获取镜像 如果只指定了镜像的名称,则默认会获取latest标签标记的镜像 命令格式:dokcer pull [Docker Registry地址]仓库名[:标签名] 获取c…...

在matlab中使用UAV123官方toolkits测试自己的数据集

一、前言 最近需要将自己的跟踪代码在自己拍摄的数据集上进行测试,这里我选择使用 UAV123 官方 toolkits 进行配置。首先需要搞清楚这部分代码是如何运行的,精度图和成功率图是如何绘制出来的,然后再将自己的数据集加进去进行测试。 二、UA…...

《淘宝 API 数据湖构建:实时商品详情入湖 + Apache Kafka 流式处理指南》

随着电商行业的蓬勃发展,淘宝作为头部电商平台,积累了海量的商品数据。构建淘宝 API 数据湖,将实时商品详情数据纳入其中,并借助 Apache Kafka 进行流式处理,能够为企业提供强大的数据支撑,助力精准营销、市…...

HTML5 WebSocket:实现高效实时通讯

一、引言 在当今的 Web 开发领域,实时通讯功能变得越来越重要。例如在线聊天、实时数据更新等场景都需要客户端与服务器之间能够进行高效的双向数据传输。HTML5 引入的 WebSocket 协议为我们提供了一种强大的解决方案,它在单个 TCP 连接上实现了全双工通讯,极大地改善了传统…...

数字人Live_Talking的搭建和使用

Live_Talking是一个实时交互流式数字人,可以实现音视频同步对话。今天咱们来试着部署一下项目。 先来看下本地环境 系统:Ubuntu 22.04 显卡:rtx 3060 cuda: Cuda 12.1 git上推荐cuda11.3,但是我用cuda12.2也搭建成功了。 1、…...

Coupang火箭计划深度攻略:eBay卖家突破韩国市场的三维数据作战模型

一、市场机遇与竞争格局解码 1.1 Coupang生态位分析 用户基数:2600万活跃买家(占韩国成年人口68%) 客单价表现:$82(较eBay韩国站高37%) 流量分布:移动端占比91%(需重点优化移动端详…...

Flask + ajax上传文件(四)--数据入库教程

本教程将详细介绍如何使用Flask后端和AJAX前端实现Excel/csv文件上传,并将数据导入数据库的功能。 一、系统架构概述 前端(HTML+JS) → AJAX请求 → Flask后端 → 数据库 二、环境准备 1. 安装必要库 pip install flask pandas sqlalchemy openpyxl2. 项目结构 data_imp…...

C++ 部署的性能优化方法

一、使用结构体提前存放常用变量 在编写前后处理函数时,通常会多次用到一些变量,比如模型输入 tensor 的 shape,count 等等,若在每个处理函数中都重复计算一次,会增加部署时的计算量。对于这种情况,可以考…...

并发设计模式实战系列(8):Active Object

🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第8章Active Object,废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 对象与执行解耦架构 2. 核心组件 二、生活化类比&#xff…...

jenkins容器提示磁盘空间过低

进入jenkins容器查看: sudo docker exec -it jenkins sh df -h查看磁盘占用情况: # df -h Filesystem Size Used Avail Use% Mounted on overlay 59G 56G 193M 100% / tmpfs 64M 0 64M 0% /dev shm…...

记一次pdf转Word的技术经历

一、发现问题 前几天在打开一个pdf文件时,遇到了一些问题,在Win10下使用WPS PDF、万兴PDF、Adobe Acrobat、Chrome浏览器打开都是正常显示的;但是在macOS 10.13中使用系统自带的预览程序和Chrome浏览器(由于macOS版本比较老了&am…...

【3分钟准备前端面试】Hybrid开发 谷歌浏览器调试安卓app

查看数据请求,页面dom结构和样式,日志打印输出,页面缓存等浏览器控制台素有功能,方便调试 检查元素,方便bug的定位 注:该文档是谷歌浏览器调试安卓apk内嵌网页 前提 app包需要是debug包,并且app的webview开启debug模式需要翻墙安卓手机打开开发者模式,开启usb调试调试…...

【二分查找】寻找峰值(medium)

6. 寻找峰值(medium) 题⽬描述:解法⼆(⼆分查找算法):算法思路:C 算法代码:Java 算法代码: 题⽬链接:162. 寻找峰值 题⽬描述: 峰值元素是指其值…...

这是一款好用的PDF工具!

用户习惯有时确实非常顽固,想要改变它可能需要漫长的时间。 比如PDF软件,我认为国产的福/昕、万/兴等软件都非常不错,它们贴合国人的使用习惯,操作起来非常顺手。但因为我习惯使用DC,所以在处理PDF文档时,…...

征程 6 逆向自证 hbm 与 bc 一致性

1.引言 在征程 6 算法工具链使用过程中,会存在算法侧与软件侧的交接,偶尔会遇到,需要自证清白的情况,例如: 算法侧反馈:bc 精度没问题,也参考了【征程 6】bc 与 hbm 一致性比对 文章&#xff…...

推荐一个微软官方开源浏览器自动化工具,可以用于UI自动化测试、爬虫等,具备.Net、Java、Python等多个版本!

推荐一个微软官方开源,且功能非常强大的浏览器自动化工具, 让我们很容易控制Chromium、Firefox 和 WebKit 内核的浏览器,实现跨浏览器的网页自动化操作。 01 项目简介 Playwright 一个开源浏览器自动化工具。 支持 Chromium、WebKit 和 Fir…...

深入理解链表:从基础操作到高频面试题解析

目录 一、链表基础概念 1.1 什么是链表? 1.2 链表核心特性 1.3 链表与数组对比 二、链表类型详解 2.1 单向链表 2.2 双向链表 2.3 循环链表 三、链表核心操作实现 3.1 插入操作 3.2 删除操作 四、链表高频面试题精讲 4.1 反转链表(LeetCode…...

【MCP Node.js SDK 全栈进阶指南】高级篇(1):MCP多服务器协作架构

随着业务规模的不断扩大和系统复杂度的提升,单一服务器架构往往无法满足高并发、高可用性和弹性扩展的需求。在MCP生态系统中,多服务器协作架构成为构建大规模应用的必然选择。本文将深入探讨MCP TypeScript-SDK在多服务器环境下的部署、协作和管理,以及如何构建高可用、高性…...

铭记之日(3)——4.28

铭记之日(3)——4.28 25.4.28,绝对是继20.12.19与24.6.26之后,又一个被钉在耻辱柱上的日子。 4.28本质上为12.19的严重恶劣版。 道德败坏、恶劣的大骗子终于在今日穿帮落马。 斯文面孔下,竟藏匿了如此罪恶幽暗混沌的内心。 24.10.20&…...

4月28日信息差全景:国际局势、科技突破与市场震荡一、国际政治与安全:俄乌冲突关键转折

一、国际政治与安全:俄乌冲突关键转折 1. 乌克兰反攻进展与情报差异 前线动态: 俄国防部称在顿涅茨克击退乌军三次进攻,摧毁12辆坦克;乌方则宣布在巴赫穆特南部推进2公里,双方战报存在显著差异。 信息差根源:战场信息管控导致西方媒体与俄媒报道截然不同。 国际援助: 美…...

Docker 容器虚拟化技术和自动化部署

Docker 容器虚拟化技术和自动化部署 一、Docker 核心组件1.1 Docker 引擎1.2 Docker 镜像1.3 Docker 容器1.4 Docker 仓库 二、Docker 环境安装清华镜像安装 三、Docker 基本操作3.1 镜像管理3.1.1 查看本地镜像 docker images3.1.2 添加镜像标签 docker tag3.1.3 查看镜像信息…...

人物5_My roommate

こんにちは Today, I will continue to share my life in JaPan. Everyone both know I couldn’t say JanPanese fluently【But I still learn this Language, I think it’s interesting for me{maybe it’s one exciting challenge, I want become a challenger that it li…...

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡 一、OpenResty技术概述 1.1 OpenResty是什么? OpenResty是一个基于Nginx的高性能Web平台,它将标准的Nginx核心与一系列强大的第三方模块(主要是LuaJIT)捆绑在一起,形成了一个全功能的Web应用服务器。不同于传…...

深度学习任务评估指标

一、概念篇 混淆矩阵有何作用? 混淆矩阵(Confusion Matrix)是用于评估分类模型性能的工具,它展示了模型预测结果与实际标签之间的对比。混淆矩阵通常包括四个关键元素: True Positive (TP):模型正确预测为正类的数量。True Negative (TN):模型正确预测为负类的数量。F…...

Python-librosa库提取音频数据的MFCC特征

文章目录 MFCC特征代码分享 MFCC特征 MFCC(Mel-Frequency Cepstral Coefficients)是通过人耳对声音频率的感知方式对音频信号进行处理得到的特征,广泛用于语音识别和音频处理。 代码分享 import os import librosa import pywt import matpl…...

因特网和万维网

本文来源 :腾讯元宝 因特网(Internet)和万维网(World Wide Web,简称WWW)是紧密相关但完全不同的两个概念,它们的核心区别如下: 本质不同​​ ​​因特网(Internet&#…...

道可云人工智能每日资讯|“人工智能科技体验展”在中国科学技术馆举行

道可云元宇宙每日简报(2025年4月28日)讯,今日元宇宙新鲜事有: 《2025年提升全民数字素养与技能工作要点》发布 近日,中央网信办、教育部、工业和信息化部、人力资源社会保障部联合印发《2025年提升全民数字素养与技能…...

Day8 鼠标控制与32位模式切换

文章目录 1. 例程harib05a(鼠标解读1)2. 例程harib05b(代码整理)3. 例程harib05c(鼠标解读2)4. 例程harib05d(移动鼠标指针)5. 通往32位模式之路 1. 例程harib05a(鼠标解…...

塔能科技:点亮节能之光,赋能工厂与城市

在能源形势日益严峻的当下,节能成为了各行各业的关键任务。工厂作为能耗大户,降低能耗迫在眉睫;市政照明作为城市运行的基本保障,也急需向绿色节能转型。塔能科技凭借其能源精准节能和定制开发的核心能力,为工厂节能和…...

UDP 报文结构与注意事项总结

目录 一、UDP报文结构简介 1. 源端口号(Source Port,16位): 2. 目的端口号(Destination Port,16位): 3. 长度(Length,16位): 4. 校…...

DBeaver CE 24.1.3 (Windows 64位) 详细安装教程

1. 下载安装包 dbeaver-ce-24.1.3-x86_64-setup.exe下载链接:https://pan.quark.cn/s/5a8dc9ad747f。 下载完成后,双击运行安装程序。 2. 运行安装向导 选择语言:安装程序启动后,选择安装语言(如英文或中文&#xff…...

Java多线程之线程控制

1、线程睡眠——sleep 如果我们需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread的sleep方法 注意如下几点问题 ①、sleep是静态方法,最好不要用Thread的实例对象调用它,因为它睡眠的始终是当前正在运…...

任意波形发生器——2路同步DA模拟量输出卡

定义‌ 任意波形发生器(Arbitrary Waveform Generator, AWG)是一种电子测试仪器,能够通过数字信号处理(DSP)和数模转换(DAC)技术生成非周期性、可编程的任意形状电信号。与传统函数发生器仅支持…...

【Java】 使用 HTTP 响应状态码定义web系统返回码

系统状态码定义 public interface GlobalErrorCodeConstants {ErrorCode SUCCESS new ErrorCode(0, "成功");// 客户端错误段 ErrorCode BAD_REQUEST new ErrorCode(400, "请求参数不正确");ErrorCode UNAUTHORIZED new ErrorCode(401, "账号未登…...

测试反馈陷入死循环?5大策略拆解新旧Bug难题

新旧Bug堆叠,测试反馈陷入死循环,如果不及时解决此问题,往往容易导致项目延期、成本增加、团队效率降低,直接影响产品的市场竞争力 。因此需及时应对此问题,进而保障项目进度如期进行,提升软件质量&#xf…...

结合大语言模型的机械臂抓取操作学习

结合大语言模型的机械臂抓取操作学习(完整ppt和代码)无视频 代码能正常运行时不负责答疑! 电子产品,一经出售,概不退换 算法设计、毕业设计、期刊专利!感兴趣可以联系我。 🏆代码获取方式1: 私信…...

待验证---Oracle 19c 在 CentOS 7 上的快速安装部署指南

Oracle 19c 在 CentOS 7 上的快速安装部署指南 Oracle Database 19c 是一个功能强大的企业级数据库系统,下面我将为您提供在 CentOS 7 上快速安装部署 Oracle 19c 的详细步骤。 一、准备工作 1. 系统要求 CentOS 7 (64位)最小内存: 2GB (推荐 8GB 以上)最小磁盘…...

风力发电领域canopen转Profinet网关的应用

在风力发电领域,开疆canopen转Profinet网关KJ-PNG-205的应用案例通常涉及将风力涡轮机内部的CANopen网络与外部的Profinet工业以太网连接起来。这种转换网关允许风力发电场的控制系统通过Profinet协议收集和监控涡轮机的状态信息,同时发送控制命令。 风力…...

vr全景相机如何选择?

VR全景相机,作为虚拟现实技术的核心设备之一,能够拍摄360度全景照片和视频,使用户通过虚拟现实设备身临其境地体验拍摄场景。 这种技术的快速发展,得益于传感器、图像处理和计算机视觉技术的不断进步。 选择一台合适的VR全景相机…...

在 Conda 中,包的安装路径在电脑的哪里

在 Conda 中,包的安装路径取决于你的 Conda 安装方式 和 环境类型(base 或其他虚拟环境)。以下是不同情况下的详细说明: 📌 1. Conda 包的默认安装路径 Conda 将所有包存储在 pkgs 目录 下,并在各个环境中…...

phpstorm用php连接数据库报错

项目场景: phpstorm用php连接数据库 问题描述 用php使用mysql_connect 的时候报错了,没有这个函数 原因分析: php解释器问题,后来查资料得知mysql_connct只适用于php5.5以下解释器。一开始用的7,改成5.3以后还是报…...

今日行情明日机会——20250428

指数依然在震荡区间,等待方向选择~ 2025年4月28日涨停主要行业方向分析 一、核心主线方向 一季报增长(业绩驱动资金避险) • 涨停家数:10家(最强方向)。 • 代表标的: ◦ 珀莱雅(2…...

Spring Boot 3与JDK 8环境下的单元测试实践指南

一、引言 在Java后端开发中,单元测试是保障代码质量的核心手段。Spring Boot作为主流框架,其单元测试体系随着版本迭代不断优化。本文聚焦于JDK 8与Spring Boot 3的组合场景,深入解析单元测试的多种实现方式,对比不同测试策略的异…...