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

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

liunx常见指令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 二、安装环境 1.租借服务器 2.下载安装 XShell 3.使用xshll登录服务器 三、Linux基础命令 一、文件和命令 ​编辑1、cd 命令 2、pwd 命令 3、ls 命令 4、cp 命令 …

人工智能GPU互联技术分析,芯片巨头UALink向英伟达NVLink开战

芯片巨头组团,向英伟达NVLink开战 八大科技巨头——AMD、博通、思科、Google、惠普企业、英特尔、Meta及微软——联合推出UALink(Ultra Accelerator Link)技术,为人工智能数据中心网络设定全新互联标准。此举旨在打破Nvidia的市场…

响应式德米拉数字内容交易系统素材下载站模板

★模板说明★ 该数字交易系统设计非常完美,两种响应式模式,可打开边栏模式和盒子模式;八种网站颜色,四种风格颜色可供用户自行选择,还可在网站选背景图片;完美的分成系统、充值功能、个人中心等等都以html…

企业网站建设方案

企业网站建设方案是企业推广和宣传的重要工具,可以帮助企业树立良好的形象,吸引更多的客户和合作伙伴。一个好的企业网站应该具备用户友好的界面设计、快速的加载速度、完善的信息分类和搜索功能、优质的内容和多样化的互动体验。下面将从以下几个方面介…

基于51单片机太阳能热水器设计

基于51单片机太阳能热水器 (仿真+程序) 功能介绍 具体功能: 1.LCD1602显示屏第一行显示温度,第二行显示温度下限; 2.按键可以设置温度的下限,控制出水; 3.当温度低于设置下限值…

大数据实训项目(小麦种子)-03、大数据环境Hadoop、Mapreduce、Hive、Hbase、HDFS搭建服务及调试

文章目录 前言一、Linux系统Centos7安装配置JDK8二、Linxu系统Centos7中搭建Hadoop3.1.0服务下载地址服务1:详细步骤(初始化与启动dfs服务)详细步骤配置环境变量 服务2:Hadoop(YARN)环境搭建 三、Linux系统搭建Hive3.1.2服务前提条…

大数据实训项目(小麦种子)-04、大数据实训项目JavaWeb环境搭建

文章目录 前言运行前准备工作1、安装Hadoop3.1.0配置winutils原因描述配置方式注意点(hadoop.dll拷贝System32目录下) 2、hive运行报错(The dir: /tmp/hive on HDFS should be writable. ) 项目环境搭建参考资料 前言 博主介绍&a…

windows 共享给linux 的使用方法

windows 作为服务器,linux作为客户端进行文件共享,有3种方法:samba nfs(网络硬盘)虚拟机共享(VirtualBox vboxsf)。 Samba 共享: 打开【控制面板】-->【启动或关闭windows功能】…

STM32定时器篇——Systick定时器的使用(实现delay延时函数)

一、Systick定时器的简介: Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器对于CM3,CM4内核芯片,都有Systick定时器。当Systick计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中…

LIMS(实验室)信息管理系统源码:系统构架组成与功能实现

LIMS(实验室)信息管理系统源码:系统构架组成与功能实现 采用先进的计算机网络技术、数据库技术和标准化的实验室管理思想,组成一个全面、规范的管理体系,为实现分析数据网上调度、分析数据自动采集、快速分布、信息共…

海外仓标签管理策略:海外仓系统标签管理设置方法与注意事项

通常来说,一个海外仓每天都会有成千上万的货物进出。只有应用了合适的标签管理策略,才能让这些货物有序,高效的流转。 你就可以随时掌握货物的位置和移动情况,更好的了解库存信息。标签的应用也有利于合理的规划仓库空间&#xf…

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形,圆圆的十分可爱。👏它的表皮酥脆,内里绵软,麦香四溢。😋拿在手里沉甸甸的,就知道用料十足。 无论是直接吃,感受那纯粹的面香,还是夹上腊汁肉,变成美味…

JUC并发编程-第二天:线程池相关

线程池相关 线程池内置线程池的使用线程池的关闭excute方法和submit方法的区别 线程池 线程池就是一个可以复用线程的技术 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,Thread…

数据分析必备:一步步教你如何用matplotlib做数据可视化(2)

1、Matplotlib Anaconda Anaconda是Python和R编程语言的免费开源发行版&#xff0c;用于大规模数据处理&#xff0c;预测分析和科学计算。 该分发使包管理和部署变得简单容易。 Matplotlib和许多其他有用的(数据)科学工具构成了分发的一部分。 包版本由包管理系统Conda管理。 …

!力扣46. 全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nu…

AI产品经理竞争越来越激烈,如何更快入行抢占红利得高薪?

前言 如果你是关注行业趋势的产品经理&#xff0c;那你一定不难察觉&#xff1a; 随着算法算力数据条件的成熟、国家政策的大力支持&#xff0c;当前人工智能赛道的竞争越来越激烈。 与此同时&#xff0c;AI人才的抢夺战也越发火热&#xff1a; 不少传统互联网产品经理都在探…

基于mybatis plus增加较复杂自定义查询以及分页

基于java技术&#xff0c;spring-boot和mybatis-plus搭建后台框架是现在非常流行的技术。 其中关于多表关联查询的实现相对比较复杂&#xff0c;在这里进行记录以供开发人员参考。 以一个系统中实际的实体类为查询为例&#xff0c; T3dMaterial实体其中的fileType属性及字段…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…

基于Java+MySQL+Tomcat+maven+JavaScript+Servlet的个人博客系统

目录 一、项目简介 二、页面效果 三、涉及的知识点 四、准备工作 1、创建maven项目&#xff0c;引入依赖 2、将前端代码粘贴到webapp目录下 3、设计数据库 4、编写数据库代码 以及 封装数据库连接操作 5、创建实体类 以及 封装对数据库的增删查改操作 五、功能实现 1…

互联网应用主流框架整合之构建REST风格的系统

REST&#xff08;Representational State Transfer&#xff09;&#xff0c;中文译为“表述性状态转移”&#xff0c;是由Roy Fielding博士在他的博士论文中提出的一种软件架构风格&#xff0c;特别适用于网络应用的设计。REST不是一个标准&#xff0c;而是一种设计原则和约束集…