【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

news2025/4/4 16:11:33

文章目录

    • 🚋Python推导式
      • 🚀一、列表推导式
        • 🌈1. 了解推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀二、字典推导式
        • 🌈1. 了解字典推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀三、集合推导式
        • 🌈1. 了解集合推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀四、生成器推导式
        • 🌈1. 了解生成器推导式
        • ❤️2. 实践
        • 💥3. 总结

🚋Python推导式

在这里插入图片描述

🚀一、列表推导式

🌈1. 了解推导式

列表推导式(List Comprehensions)是Python中一种简洁、高效的创建列表的方法。它允许你用一行代码代替多行循环结构来生成新的列表。列表推导式的语法结构紧凑,易于阅读,适用于基于现有列表或者其他可迭代对象生成新列表的场景,特别是当新列表的每个元素都是通过对原列表元素进行某种变换或过滤得到时。

基本语法结构如下:

[expression for item in iterable if condition]
  • expression:是要应用到每个元素上的表达式,用于生成新列表中的元素。
  • item:是每次循环迭代中的当前元素。
  • iterable:是你要遍历的任何可迭代对象,如列表、元组、字符串等。
  • if condition:是可选的筛选条件,只有当条件为真时,对应的元素才会被包含在新列表中。
[ 表达式 for 变量 in 序列 [if 条件] ]
# 表达式 是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;
# 变量 是循环体内部的循环变量,每次循环从 序列 中取出一个元素;
# 序列 是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;
# if 条件 是可选的条件判断语句,用于对元素进行筛选。
❤️2. 实践

【示例1】:生成 0 到 9 的平方数列表

# 生成 0 到 9 的平方数列表:
squares = [x**2 for x in range(10)]
print(squares)   # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在这里插入图片描述

【示例2】:获取一个列表中所有偶数的平方

# 获取一个列表中所有偶数的平方
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)   # [4, 16, 36]

在这里插入图片描述

【示例3】:将一个句子拆分成单词列表

# 将一个句子拆分成单词列表
sentence = "This is a sample sentence."
words = [word for word in sentence.split()]
print(words)   # ['This', 'is', 'a', 'sample', 'sentence.']

在这里插入图片描述

【示例4】:将data里面不与demo重复的数据进行添加进demo中

# 在多场景的情况下需要有特殊操作
demo = [1]
data = [1, 2, 3, 4, 5, 6]
# 将data里面不与demo重复的数据进行添加进demo中
[demo.append(i) for i in data if i not in demo]
# 这里之所以不进行变量接收是因为数据是添加到了demo列表里面了
print(demo)

在这里插入图片描述

💥3. 总结
使用列表推导式可以方便地生成一个列表,并且能够对其中的元素进行变换和过滤。
它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。

在python代码执行的规则性能上面来看,其效率会更好一些;不过不建议处理过于复杂的结构,不利于代码维护及调试

元组推导式及集合推导式 的操作与列表推导式相同

🚀二、字典推导式

🌈1. 了解字典推导式

字典推导式(Dictionary Comprehensions)是Python中用于创建字典的快捷方式,其工作原理类似于列表推导式,但用于生成字典。字典推导式让你能够以一种简洁、易读的方式从可迭代对象中创建字典。其基本结构允许你快速地对数据进行转换或过滤,并形成键值对。

基本语法结构如下:

{key_expression: value_expression for item in iterable if condition}
  • key_expression:为字典中每个键生成的表达式。
  • value_expression:为字典中每个值生成的表达式。
  • item:在迭代过程中当前的元素。
  • iterable:要遍历的任何可迭代对象。
  • if condition:可选条件,仅当条件为真时,当前元素才会被包含在新字典中。
# 基本语法
{ 键表达式: 值表达式 for 变量 in 序列 [if 条件] }

# 键表达式 和 值表达式 分别是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;
# 变量 是循环体内部的循环变量,每次循环从 序列 中取出一个元素;
# 序列 是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;
if 条件 是可选的条件判断语句,用于对元素进行筛选。
❤️2. 实践

【示例1】:将一个字典中所有键转换为大写

# 将一个字典中所有键转换为大写
d = {'name': 'Alice', 'age': 25, 'email': 'alice@example.com'}
new_d = {key.upper(): value for key, value in d.items()}
print(new_d)   # {'NAME': 'Alice', 'AGE': 25, 'EMAIL': 'alice@example.com'}

在这里插入图片描述
【示例2】:将一个列表中的元素映射为它们本身及其长度

# 将一个列表中的元素映射为它们本身及其长度
words = ['apple', 'banana', 'pear']
word_lengths = {word: len(word) for word in words}
print(word_lengths)   # {'apple': 5, 'banana': 6, 'pear': 4}

在这里插入图片描述

【示例3】:倒转一个字典中的键值对

# 倒转一个字典中的键值对
d = {1: 'A', 2: 'B', 3: 'C'}
new_d = {value: key for key, value in d.items()}
print(new_d)   # {'A': 1, 'B': 2, 'C': 3}

在这里插入图片描述

# 构建字典

key_1 = ['比赛', '友谊']
value_2 = [1, 2]

# 字典推导式创建列表的话就只要一行搞定!!!
dict_2 = {key_1[i]: value_2[i] for i in range(len(key_1))}
print(dict_2)

-------------------------------------------------------------------------------------------------
key_1 = ['快乐', '日拱一卒', 'hahha', 'dddd']
value = [18, 19]

# dict1 = {key_1[i]: value[i] for i in range(len(key_1)) if len(key_1) == len(value)}

num = len(key_1) - len(value)  # 查看长度差
if num > 0:  # 如果num大于0 说明键列表长度 大于 值列表长度
  
    # 将能够配对部分进行构建字典  ---- range(len(key_1)-num)
    dict1 = {key_1[i]: value[i] for i in range(len(key_1)-num)}
    
    # 将没有值的键部分进行构建
    #  len(key_1)-a  ---- 下标起始位
    #  len(key_1)  -------- 结束位置
    #  [dict1.setdefault(key_1[i], None) for i in range(len(key_1)-a, len(key_1))]
    for i in range(len(key_1)-a, len(key_1)):
        dict1[key_1[i]] = None
else:
    dict1 = {key_1[i]: value[i] for i in range(len(key_1))}
print(dict1)
💥3. 总结
使用字典推导式可以方便地生成一个字典,并且能够对其中的元素进行变换和过滤。
它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。

🚀三、集合推导式

🌈1. 了解集合推导式

集合推导式(Set Comprehensions)是Python中用来创建集合(set)的一种高效、简洁的语法结构。集合内的元素是唯一的,不重复。集合推导式的语法形式类似于列表推导式,但用花括号{}替代了方括号[]。这使得它非常适合于从可迭代对象中过滤出唯一值或执行集合运算。

基本语法结构如下:

{expression for item in iterable if condition}
  • expression: 表达式,计算结果作为集合中的元素。
  • item: 迭代变量,代表iterable中的每个元素。
  • iterable: 任何可迭代对象,如列表、元组、字符串等。
  • condition(可选): 筛选条件,只有当条件为真时,相应的expression才会被包含进结果集合中。
❤️2. 实践

【示例1】:数字的唯一集合

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

在这里插入图片描述
【示例2】:只想保留偶数

numbers = [1, 2, 2, 3, 4, 4, 5]
even_numbers = {num for num in numbers if num % 2 == 0}
print(even_numbers)

在这里插入图片描述

💥3. 总结

集合推导式是Python中一种高级且紧凑的构造集合(set)的方式,它借鉴了列表推导式的概念,但生成的是一个不包含重复元素的集合。这种表达式非常适合于从可迭代对象中快速提取唯一值、执行条件过滤或转换数据,同时利用集合的特性来自动去除重复项。

🚀四、生成器推导式

🌈1. 了解生成器推导式

生成器推导式(Generator Expression)是Python中另一种高效的数据处理工具,它是列表推导式的lazy(惰性)版本,用于创建生成器对象。生成器不会立即计算出所有结果并存储在内存中,而是在每次迭代时按需生成下一个值,这对于处理大规模数据集时尤其有用,因为它可以显著节省内存。生成器推导式的语法结构与列表推导式相似,但使用圆括号而非方括号包围。

基本语法:

(expression for item in iterable if condition)
  • expression:生成的每个项的计算表达式。
  • item:在迭代期间考虑的当前项。
  • iterable:任何可迭代的对象,如列表、元组、字符串或其它可迭代数据结构。
  • condition(可选):一个过滤条件,仅当条件为真时,相应的项才被生成。

特点总结:

  1. 内存效率:生成器推导式在内存中不保存所有生成的值,而是在每次迭代时生成下一个值,这对于大数据处理至关重要。
  2. 惰性求值:直到调用(如通过迭代或转换为列表等操作),生成器才开始计算。
  3. 使用场景:适合处理大量数据流、实现无限序列或在内存限制下操作数据集。
  4. 功能强大:可以结合迭代、条件判断和函数调用,实现复杂的数据处理逻辑。
  5. 语法简洁:与列表推导式相似的紧凑语法,易于阅读和编写。
❤️2. 实践

【示例】:计算1到10的平方,但只包括偶数平方

# 计算1到10的平方,但只包括偶数平方
squares_gen = (x**2 for x in range(1, 11) if x % 2 == 0)

for square in squares_gen:
    print(square, end=' ')

在这里插入图片描述
(x**2 for x in range(1, 11) if x % 2 == 0)定义了一个生成器推导式,它会按需计算并产生满足条件的偶数平方值。每次循环迭代时,生成器推进到下一个值,直到所有的元素都已生成完毕。

💥3. 总结

生成器推导式是Python中一种高级构造,用于简洁地创建迭代器对象。它类似于列表推导式,但不立即计算所有元素而是生成一个惰性求值的迭代器。当需要处理大量数据或无限序列时,这种方式尤其有效,因为它可以逐个产生项目,仅在需要时计算,从而节省内存。通过使用圆括号而非方括号定义,生成器推导式允许程序在遍历数据集合的同时保持低内存占用,非常适合于数据流处理和高效循环遍历场景。

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

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

相关文章

Qwen2的各模型性能、占用显存和推理速度比较(摘自官方文档)

Qwen2的各模型性能、占用显存和推理速度比较(摘自官方文档) 性能 推理速度(从大到小) 72B 57B-A14B 7B 1.5B 0.5B

目标检测数据集 - PCB板表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:PCB 板表面缺陷检测数据集,真实采集高质量 PCB 板表面含缺陷图片数据,数据集含多款不同 PCB 板高清表面图片数据,包括俯拍正拍、旋转拍摄姿态。数据标注标签包括 missing_hole、mouse_bite、open_circuit、short、spur…

【ARM-Linux篇】阿里云人脸识别方案

一、接入阿里云 https://vision.aliyun.com/ 点击“人脸搜索1:N” 点击"立即开通": 使用阿里云APP/支付宝/钉钉扫码登录: 购买“人脸搜索1:N”能力,第一次购买,可以有5000次的免费使用: 开通完后&#xff…

C++ bfS

岛屿的最大面积 . - 力扣(LeetCode) 1.刚开始mn又加了int 2.bfs里符合条件了,不push,,,在写什么几把 class Solution { public:int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};bool vis[50][50];int…

学习笔记——网络管理与运维——SNMP(SNMP版本)

二、SNMP版本 1、SNMP版本 SNMP共有三个版本:SNMPv1、SNMPv2c和SNMPv3。 (1)SNMPv1 1990年5月,RFC1157定义了SNMP的第一个版本SNMPv1。RFC1157提供了一种监口控和管理计算机网络的系统方法。SNMPv1基于团体名认证,安全性较差,…

宠物健康顾问系统的设计

管理员账户功能包括:系统首页,个人中心,顾问管理,用户管理,健康知识管理,管理员管理,论坛管理,公告管理 顾问账户功能包括:系统首页,个人中心,顾…

长亭网络通信基础

长亭笔试之前就已经学过一遍了 这算温故而知新吧 TCP/IP 首先我在这里默写一下之前的7层和4层 应用层 应 【表示层 数据格式转换 传 【会话层 …

Docker部署常见应用之SFTP服务器

文章目录 简介Dockers部署单用户多用户用户信息加密使用SSH密钥认证 参考文章 简介 atmoz/sftp 是一个基于 Docker 的 SFTP 服务镜像,它使用 OpenSSH 来提供 SFTP 服务。这个镜像支持创建单个或多个用户的 SFTP 访问,并允许用户通过 SFTP 协议安全地共享…

通信协议—Modbus

1、modbus简介 Modbus服务器:接收处理来自客户端的请求,并返回相应的响应; Modbus客户端:向Modbus服务器发送请求,并接收服务器返回的响应的设备或程序; 2、modbus poll调试工具下载 modbus poll用于测…

2024 JavaScript笔记(精简版)

系列文章目录 文章目录 系列文章目录第一章 JavaScript简介:1.1 特点:1.2 JavaScript与Java的区别1.3 JavaScript不能做什么1.4 JavaScript组成 第二章 JavaScript必备基础知识JavaScript代码调试方式 一、变量2.1.1 变量的命名规则:2.1.2 变…

03-appium环境配置和启动参数设置

参考文章:https://blog.csdn.net/lovedingd/article/details/110949993 一、appium介绍 Appium是一个开源、跨平台的自动化测试框架,支持Android、IOS等平台,同时也支持多语言,比如:Java、Python等。 Appiumu通过扩展…

【内存管理之C语言数组】

1.栈空间上的C数组 糟糕的可用性,但是你将在遗留代码中见到它们 相同类型的对象的内存块 大小必须是常量表达式 第一个元素索引为0 2.指针和C数组 更奇怪的是:数组标识符退化为指向第一个元素的指针 3.访问数组 4.堆空间上的C数组 相同类型的对象的内…

transformer模型首次体验代码

前言 首先是安装python,更新pip源到清华源。安装transformer pip install transformer安装jupyter lab,也简单一行 pip install jupyterlab现在不想用anaconda了,因为国内没有源了,国外的又慢。直接用pip吧。 然后开始体验之旅…

Go TOKEN机制与跨域处理方式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深入浅出 Qt 中 QListView 的设计思想,并掌握大规模、高性能列表的实现方法

在大规模列表控件的显示需求中,必须解决2个问题才能获得较好的性能: 第一就是数据存在哪里, 避免出现数据的副本。第二就是如何展示Item,如何复用或避免创建大量的Item控件。 在QListView体系里,QAbstractListModel解…

大数据实训项目(小麦种子)-02、实训项目整体功能介绍与演示

文章目录 前言界面及功能描述实现功能描述技术选型界面展示首页界面功能1:HDFS,选择文件上传文件详细步骤 功能2:MapReduce预处理数据功能3:Hbase存储小麦种子数据并查询前10条记录功能4:Hive分析原始csv文件数据并ech…

Linux C编译器从零开发二

自定义分词器 test.c #include <ctype.h> #include <stdarg.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h>typedef enum {TK_PUNCT, // PunctuatorsTK_NUM, // Numeric literalsTK_EOF, // …

基于flask的网站如何使用https加密通信-问题记录

文章目录 项目场景&#xff1a;问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景&#xff1a; 项目场景&#xff1a;基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…

BUUCTF---[MRCTF2020]你能看懂音符吗

1、下载附件&#xff0c;是一个压缩包&#xff0c;解压&#xff0c;发现解压失败 2、用winhex分析文件&#xff0c;发现文件头不对 3、将文件头改为&#xff1a;52617221&#xff0c;保存 4、解压得到word 5、在文档发现下面内容 6、根据题目的描述&#xff0c;将音乐字符解码…

Docker部署MaxKB 知识库(提高问答命中率)

前言 上一篇文章简单的介绍了下MaxKB&#xff0c;这一篇文章就讲如何部署MaxKB。 MaxKB实现逻辑也比较简单&#xff0c;如下图。 安装 修改Docker镜像源 由于不可抗力&#xff0c;部分源已经无法使用&#xff0c;需要修改以下的源地址来拉取镜像。如果是linux&#xff0c;…