找回密码
 会员注册
查看: 22|回复: 0

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

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72021
发表于 2024-9-8 10:59:21 | 显示全部楼层 |阅读模式
文章目录🚋Python推导式🚀一、列表推导式🌈1.了解推导式❤️2.实践💥3.总结🚀二、字典推导式🌈1.了解字典推导式❤️2.实践💥3.总结🚀三、集合推导式🌈1.了解集合推导式❤️2.实践💥3.总结🚀四、生成器推导式🌈1.了解生成器推导式❤️2.实践💥3.总结🚋Python推导式🚀一、列表推导式🌈1.了解推导式列表推导式(ListComprehensions)是Python中一种简洁、高效的创建列表的方法。它允许你用一行代码代替多行循环结构来生成新的列表。列表推导式的语法结构紧凑,易于阅读,适用于基于现有列表或者其他可迭代对象生成新列表的场景,特别是当新列表的每个元素都是通过对原列表元素进行某种变换或过滤得到时。基本语法结构如下:[expressionforiteminiterableifcondition]1expression:是要应用到每个元素上的表达式,用于生成新列表中的元素。item:是每次循环迭代中的当前元素。iterable:是你要遍历的任何可迭代对象,如列表、元组、字符串等。ifcondition:是可选的筛选条件,只有当条件为真时,对应的元素才会被包含在新列表中。[表达式for变量in序列[if条件]]#表达式是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;#变量是循环体内部的循环变量,每次循环从序列中取出一个元素;#序列是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;#if条件是可选的条件判断语句,用于对元素进行筛选。12345❤️2.实践【示例1】:生成0到9的平方数列表#生成0到9的平方数列表:squares=[x**2forxinrange(10)]print(squares)#[0,1,4,9,16,25,36,49,64,81]123'运行运行【示例2】:获取一个列表中所有偶数的平方#获取一个列表中所有偶数的平方numbers=[1,2,3,4,5,6]even_squares=[x**2forxinnumbersifx%2==0]print(even_squares)#[4,16,36]1234'运行运行【示例3】:将一个句子拆分成单词列表#将一个句子拆分成单词列表sentence="Thisisasamplesentence."words=[wordforwordinsentence.split()]print(words)#['This','is','a','sample','sentence.']1234'运行运行【示例4】:将data里面不与demo重复的数据进行添加进demo中#在多场景的情况下需要有特殊操作demo=[1]data=[1,2,3,4,5,6]#将data里面不与demo重复的数据进行添加进demo中[demo.append(i)foriindataifinotindemo]#这里之所以不进行变量接收是因为数据是添加到了demo列表里面了print(demo)1234567'运行运行💥3.总结使用列表推导式可以方便地生成一个列表,并且能够对其中的元素进行变换和过滤。它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。在python代码执行的规则性能上面来看,其效率会更好一些;不过不建议处理过于复杂的结构,不利于代码维护及调试元组推导式及集合推导式的操作与列表推导式相同123456🚀二、字典推导式🌈1.了解字典推导式字典推导式(DictionaryComprehensions)是Python中用于创建字典的快捷方式,其工作原理类似于列表推导式,但用于生成字典。字典推导式让你能够以一种简洁、易读的方式从可迭代对象中创建字典。其基本结构允许你快速地对数据进行转换或过滤,并形成键值对。基本语法结构如下:{key_expression:value_expressionforiteminiterableifcondition}1key_expression:为字典中每个键生成的表达式。value_expression:为字典中每个值生成的表达式。item:在迭代过程中当前的元素。iterable:要遍历的任何可迭代对象。ifcondition:可选条件,仅当条件为真时,当前元素才会被包含在新字典中。#基本语法{键表达式:值表达式for变量in序列[if条件]}#键表达式和值表达式分别是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;#变量是循环体内部的循环变量,每次循环从序列中取出一个元素;#序列是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;if条件是可选的条件判断语句,用于对元素进行筛选。1234567❤️2.实践【示例1】:将一个字典中所有键转换为大写#将一个字典中所有键转换为大写d={'name':'Alice','age':25,'email':'alice@example.com'}new_d={key.upper():valueforkey,valueind.items()}print(new_d)#{'NAME':'Alice','AGE':25,'EMAIL':'alice@example.com'}1234'运行运行【示例2】:将一个列表中的元素映射为它们本身及其长度#将一个列表中的元素映射为它们本身及其长度words=['apple','banana','pear']word_lengths={word:len(word)forwordinwords}print(word_lengths)#{'apple':5,'banana':6,'pear':4}1234'运行运行【示例3】:倒转一个字典中的键值对#倒转一个字典中的键值对d={1:'A',2:'B',3:'C'}new_d={value:keyforkey,valueind.items()}print(new_d)#{'A':1,'B':2,'C':3}1234'运行运行#构建字典key_1=['比赛','友谊']value_2=[1,2]#字典推导式创建列表的话就只要一行搞定!!!dict_2={key_1[i]:value_2[i]foriinrange(len(key_1))}print(dict_2)-------------------------------------------------------------------------------------------------key_1=['快乐','日拱一卒','hahha','dddd']value=[18,19]#dict1={key_1[i]:value[i]foriinrange(len(key_1))iflen(key_1)==len(value)}num=len(key_1)-len(value)#查看长度差ifnum>0:#如果num大于0说明键列表长度大于值列表长度#将能够配对部分进行构建字典----range(len(key_1)-num)dict1={key_1[i]:value[i]foriinrange(len(key_1)-num)}#将没有值的键部分进行构建#len(key_1)-a----下标起始位#len(key_1)--------结束位置#[dict1.setdefault(key_1[i],None)foriinrange(len(key_1)-a,len(key_1))]foriinrange(len(key_1)-a,len(key_1)):dict1[key_1[i]]=Noneelse:dict1={key_1[i]:value[i]foriinrange(len(key_1))}print(dict1)123456789101112131415161718192021222324252627282930💥3.总结使用字典推导式可以方便地生成一个字典,并且能够对其中的元素进行变换和过滤。它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。12🚀三、集合推导式🌈1.了解集合推导式集合推导式(SetComprehensions)是Python中用来创建集合(set)的一种高效、简洁的语法结构。集合内的元素是唯一的,不重复。集合推导式的语法形式类似于列表推导式,但用花括号{}替代了方括号[]。这使得它非常适合于从可迭代对象中过滤出唯一值或执行集合运算。基本语法结构如下:{expressionforiteminiterableifcondition}1expression:表达式,计算结果作为集合中的元素。item:迭代变量,代表iterable中的每个元素。iterable:任何可迭代对象,如列表、元组、字符串等。condition(可选):筛选条件,只有当条件为真时,相应的expression才会被包含进结果集合中。❤️2.实践【示例1】:数字的唯一集合numbers=[1,2,2,3,4,4,5]unique_numbers={numfornuminnumbers}print(unique_numbers)123'运行运行【示例2】:只想保留偶数numbers=[1,2,2,3,4,4,5]even_numbers={numfornuminnumbersifnum%2==0}print(even_numbers)123'运行运行💥3.总结集合推导式是Python中一种高级且紧凑的构造集合(set)的方式,它借鉴了列表推导式的概念,但生成的是一个不包含重复元素的集合。这种表达式非常适合于从可迭代对象中快速提取唯一值、执行条件过滤或转换数据,同时利用集合的特性来自动去除重复项。🚀四、生成器推导式🌈1.了解生成器推导式生成器推导式(GeneratorExpression)是Python中另一种高效的数据处理工具,它是列表推导式的lazy(惰性)版本,用于创建生成器对象。生成器不会立即计算出所有结果并存储在内存中,而是在每次迭代时按需生成下一个值,这对于处理大规模数据集时尤其有用,因为它可以显著节省内存。生成器推导式的语法结构与列表推导式相似,但使用圆括号而非方括号包围。基本语法:(expressionforiteminiterableifcondition)1expression:生成的每个项的计算表达式。item:在迭代期间考虑的当前项。iterable:任何可迭代的对象,如列表、元组、字符串或其它可迭代数据结构。condition(可选):一个过滤条件,仅当条件为真时,相应的项才被生成。特点总结:内存效率:生成器推导式在内存中不保存所有生成的值,而是在每次迭代时生成下一个值,这对于大数据处理至关重要。惰性求值:直到调用(如通过迭代或转换为列表等操作),生成器才开始计算。使用场景:适合处理大量数据流、实现无限序列或在内存限制下操作数据集。功能强大:可以结合迭代、条件判断和函数调用,实现复杂的数据处理逻辑。语法简洁:与列表推导式相似的紧凑语法,易于阅读和编写。❤️2.实践【示例】:计算1到10的平方,但只包括偶数平方#计算1到10的平方,但只包括偶数平方squares_gen=(x**2forxinrange(1,11)ifx%2==0)forsquareinsquares_gen:print(square,end='')12345'运行运行(x**2forxinrange(1,11)ifx%2==0)定义了一个生成器推导式,它会按需计算并产生满足条件的偶数平方值。每次循环迭代时,生成器推进到下一个值,直到所有的元素都已生成完毕。💥3.总结生成器推导式是Python中一种高级构造,用于简洁地创建迭代器对象。它类似于列表推导式,但不立即计算所有元素而是生成一个惰性求值的迭代器。当需要处理大量数据或无限序列时,这种方式尤其有效,因为它可以逐个产生项目,仅在需要时计算,从而节省内存。通过使用圆括号而非方括号定义,生成器推导式允许程序在遍历数据集合的同时保持低内存占用,非常适合于数据流处理和高效循环遍历场景。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 22:52 , Processed in 0.457467 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表