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

Python 推导式详解:高效简洁的数据处理技巧

推导式是 Python 提供的一种简洁而强大的语法,用于创建列表、集合和字典。它可以让代码更简洁、更易读,同时提高运行效率。

基本语法

列表推导式

基本语法:

[expression for item in iterable if condition]

示例:

# 生成平方数列表
squares = [x ** 2 for x in range(10)]
print(squares)
集合推导式

基本语法:

{expression for item in iterable if condition}

示例:

# 生成唯一平方数集合
unique_squares = {x ** 2 for x in range(10)}
print(unique_squares)
字典推导式

基本语法:

{key: value for item in iterable if condition}

示例:

# 生成数值及其平方的字典
square_dict = {x: x ** 2 for x in range(10)}
print(square_dict)

命令

  • expression:生成推导式中的元素,可以是一个函数或其他表达式。
  • item:迭代器中的当前元素。
  • iterable:任何可以迭代的对象,比如列表、集合、字典等。
  • condition:可选,过滤条件。

示例

列表推导式

生成一个包含所有偶数的列表:

evens = [x for x in range(20) if x % 2 == 0]
print(evens)
集合推导式

生成一个包含所有不重复字母的大写集合:

unique_letters = {char.upper() for char in 'hello world' if char.isalpha()}
print(unique_letters)
字典推导式

生成一个数字及其立方值的字典:

cubes = {x: x ** 3 for x in range(10)}
print(cubes)

应用场景

数据处理

推导式广泛用于数据处理和转换。比如从一个列表中过滤出满足特定条件的元素,或对元素进行转换。

# 过滤出正数
numbers = [-5, 3, -2, 9, 0]
positives = [n for n in numbers if n > 0]
print(positives)
矩阵操作

推导式可以用于矩阵的生成和操作,比如转置矩阵。

# 生成矩阵
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 矩阵转置
transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transpose)
生成测试数据

可以快速生成各种测试数据,比如随机数列表、字符串列表等。

import random
# 生成10个随机数
random_numbers = [random.randint(1, 100) for _ in range(10)]
print(random_numbers)

注意事项

在使用 Python 推导式时,需要注意以下几点,以确保代码的可读性、性能和正确性。

1. 可读性

推导式应尽量保持简洁,如果太复杂,可能会影响代码可读性。过于复杂的推导式可能会使代码难以理解和维护。因此,应该避免在推导式中编写过于复杂的逻辑。

示例代码:

# 简洁且可读性高的推导式
squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(squares)  # 输出: [0, 4, 16, 36, 64]# 复杂且可读性低的推导式
complex_expression = [x ** 2 for x in range(10) if x % 2 == 0 if x > 5]
print(complex_expression)  # 输出: [36, 64]
2. 性能

在处理大数据集时,推导式的性能优势可能会不明显,甚至导致内存问题。推导式会将结果存储在内存中,对于非常大的数据集,可能会导致内存不足的情况。在这种情况下,可以考虑使用生成器表达式。

示例代码:

# 使用推导式处理大数据集,可能会导致内存问题
large_list = [x ** 2 for x in range(10000000)]  # 占用大量内存# 使用生成器表达式处理大数据集,节省内存
large_generator = (x ** 2 for x in range(10000000))  # 仅在需要时生成数据
print(next(large_generator))  # 输出: 0
3. 错误处理

推导式中缺乏错误处理机制,需确保代码中没有会引发错误的部分。如果推导式中的表达式可能引发错误,应该在推导式外进行处理。

示例代码:

# 推导式中缺乏错误处理机制
numbers = [1, 2, 'three', 4]try:squares = [x ** 2 for x in numbers]
except TypeError as e:print(f"Error: {e}")# 在推导式外进行错误处理
def safe_square(x):try:return x ** 2except TypeError:return Nonesquares = [safe_square(x) for x in numbers]
print(squares)  # 输出: [1, 4, None, 16]
4. 嵌套推导式

嵌套推导式应谨慎使用,复杂的嵌套会降低代码可读性和维护性。对于多层嵌套的推导式,考虑将其拆分为多个独立的推导式或使用常规循环。

示例代码:

# 嵌套推导式,较复杂且可读性低
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in matrix for item in sublist]
print(flat_list)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]# 拆分为多个独立的推导式,可读性高
flat_list = []
for sublist in matrix:for item in sublist:flat_list.append(item)
print(flat_list)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

总结

Python 推导式提供了一种简洁而高效的方式来创建和操作列表、集合和字典。它不仅能使代码更加简洁易读,还能提高运行效率。在实际应用中,应根据具体需求和数据规模选择合适的推导式,并注意保持代码的可读性和可维护性。

相关文章:

Python 推导式详解:高效简洁的数据处理技巧

推导式是 Python 提供的一种简洁而强大的语法,用于创建列表、集合和字典。它可以让代码更简洁、更易读,同时提高运行效率。 基本语法 列表推导式 基本语法: [expression for item in iterable if condition]示例: # 生成平方…...

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点:使用场景: 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点:使用场景: 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…...

leetcode - 20.有效的括号(LinkedHashMap)

leetcode题目有效的括号,分类是easy,但是博主前前后后提交了几十次才通过,现在记录一下使用Java语言的写法。 题目链接: 20.有效的括号 题目描述: 给定一个只包括 (,),{,},[&…...

多维数组的动态内存分配(malloc和new)

一.区别指针类型 动态分配二维数组的内存不要赋值给行指针,而要赋值给二级指针。 二.分配动态二维数组的方法 1.使用指针数组 然后对指针数组的每一个元素分别malloc一维数组 2.直接使用malloc // 分配了一个指针数组,row为二维数组行数 int **p (i…...

71、评测OrangePi AIpro开发板和USB CAMERAOAK视频解码+推理+编码+推流测试

基本思想:csdn赞助了OrangePi AIpro开发板,花点时间简单和oak深度相机绑定测试一下,反正之前玩过atlas 200 dk A2,应该差不多,引用了之前的usb相机,方便小伙伴测试使用 第一步:系统刷机,参考官方吧,懒得刷机了,参考官方手册即可链接:https://pan.baidu.com/s/1umXM3i…...

为什么需要开局调用函数?

初始化操作:在你的应用程序启动时,可能需要执行一些初始化操作,例如设置默认值、加载配置、建立数据库连接等。开局调用函数可以帮助你集中管理这些操作,确保它们在应用程序启动时顺利执行。 统一入口:通过一个统一的…...

QT-demo:0轴分布图表

版本:5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库: pip install PyQt5 matplotlib创建和显示图表: import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…...

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github&#…...

碰撞检测技术在AI中的重要作用

引言: 随着人工智能技术的不断发展,AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中,碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用,以及如何利用这项技术来改善AI系统的性能和用户体…...

UE5 Cesium2 最新使用地理配准子关卡构造全球场景

参考官方最新教程:Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡(主关卡) 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立,官方教程分为了两…...

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~🥳🎉🎉🎉 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表,输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表,找…...

【精读文献】J. Environ. Manage.|青藏高原生态恢复项目下植被覆盖动态及其对生态系统服务的约束效应

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 2.1 研究背景 2.2 研究现状 03 研究区域与数据集 3.1 研究区域 3.2 研究数据 04 研究方法 4.1 趋势分析 4.2 残差趋势分析 4.3 偏相关 4.4 生态系统服务评价 4.5 约束线的定义和提取 05 研究结果 5.1 植被…...

QT之常用控件

一个图形化界面当然需要有各种各样的控件,QT也不例外,在QT designer中就有提供各种各样的控件,用以开发图形化界面。 而想使用好一个QT控件,就需要了解这些控件。 QWidget 在QT中,所有控件都继承自 QWidget 类&…...

【嵌入式硬件】DRV8874电机驱动

目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…...

考研数学:有些无穷小不能用等价无穷小的公式?

今天要给大家分享的笔记是:《有些无穷小虽然是无穷小,但却不能用无穷小的相关公式》:...

谷歌浏览器的平替,内置开挂神器,我已爱不释手!

油猴浏览器正式版是一款基于谷歌Chromium源码开发的浏览器,它集成了集成了强大的油猴扩展(Tampermonkey),使得用户可以轻松安装各种脚本,从而增强网页浏览体验。提供了一个更加个性化和高效的浏览体验。 油猴扩展&…...

UMLChina为什么叒要翻译《分析模式》?

UMLChina受机械工业出版社委托,重新翻译《分析模式》。 Martin Fowler的“Analysis Patterns,Reusable Object Models”,原书出版于1997年,至今为止未出第2版。 2004年,机械工业出版社出版该书中译本《分析模式》。 …...

npm install 安装很慢如何解决?

1. 使用淘宝镜像 淘宝提供了一个更快的 npm 镜像源,可以大大加快依赖包的下载速度。你可以通过以下命令来设置淘宝镜像: npm config set registry https://registry.npmmirror.com然后再次运行 npm install: npm install2. 使用 nrm 切换镜…...

哈夫曼树的构造,哈夫曼树的存在意义--求哈夫曼编码

一:哈夫曼树的构造 ①权值,带权路径长度。 ②一组确定权值的叶子节点可以构造多个不同的二叉树,但是带权路径长度min的是哈夫曼树 ③算法基本思想及其实操图片演示 注:存储结构和伪代码 1 初始化: 构造2n-1棵只有一个根节点的二叉树,parent=rchild=lchild=-1; 其中…...

一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)

随着摩尔定律的逐渐放缓,传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性,为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块,极大地提高了资源的利用率和系统的综合性能。 FPGA…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

PydanticAI快速入门示例

参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...