python推导式的使用方法实例
前言
推导式提供了更简洁高效的方法来生成序列而又不失代码的可读性。
定义:推导式是Python里很有用的一个特性,它可以用一行代码就可以创建一个新的序列(比如:列表,集合,字典等等)。通过这个性能,不仅可以少写很多代码,而且性能上也更快。
Python里有四种推导式:
- 列表推导式(ListComprehensions)
- 字典推导式(DictionaryComprehensions)
- 集合推导式(SetComprehensions)
- 生成器推导式(GeneratorComprehensions)
一、列表推导式(ListComprehensions)
假如你有一个列表,你想去掉该列表中的所有负数,那通常的做法使用for循环
numbers=[1,-2,3,-4,5] new_nums=[] fornuminnumbers: ifnum>0: new_nums.append(num) print(new_nums)
输出结果:
但如果我们用列表推导式来实现,那么这个过程就短得多,只需要一行代码:
numbers=[1,-2,3,-4,5] new_nums=[numfornuminnumbersifnum>0] print(new_nums)
输出结果同上。
列表推导式的结构:
output_list=[expressionforvarininput_listifcondition]
这里的ifcondition语句并不是必须有的。
二、字典推导式(DictionaryComprehensions)
跟列表推导式一样,通过同样方式生成字典的方法,就是字典推导式。
假如你想从一个全是数字的列表来创建一个字典,列表里的数字作为key,数字的的字符串值作为value,然后再某个限制条件,最终获得你想要的字典数据:
nums=[1,2,3,4,5,6,7,8] dict={} fornuminnums: ifnum%2==0: dict[num]=str(num) print(dict)
输出结果:
如果我们使用字典推导式,就会简洁的多:
nums=[1,2,3,4,5,6,7,8] dict={num:str(num)fornuminnumsifnum%2==0} print(dict)
输出结果同上。
字典推导式的模板:
{key:valuefor(key,value)indictifkey,valuesatisfycondition}
三、集合推导式(SetComprehensions)
集合推导式跟列表推导式差不多。就比如我们要把一个全是数字的列表中的奇数组成一个集合,用for循环的话:
numbers=[1,2,3,4,5,6,7,8] filtered_nums=set() fornuminnumbers: ifnum%2==0: filtered_nums.add(num) print(filtered_nums)
输出结果:
如果我们使用集合表达式来表示:
numbers=[1,2,3,4,5,6,7,8] filtered_nums={numfornuminnumbersifnum%2==0} print(filtered_nums)
输出结果同上。
注意:集合推导式除了是使用{}外,其他形式都跟列表推导式一样。
四、生成器推导式(GeneratorComprehensions)
生成器推导式(或叫生成器表达式),其结构也跟列表表达式相似。
例如我们将数字列表中各项平方运算并排除奇数项:
defsquare_even(numbers): fornumberinnumbers: ifnumber%2==0: yield(number*number) numbers=[1,2,3,4,5,6] square_numbers=square_even(numbers) fornumberinsquare_numbers: print(number)
输出结果:
使用生成器推导式显示为:
numbers=[1,2,3,4,5,6] square_numbers=(num*numfornuminnumbersifnum%2==0) fornumberinsquare_numbers: print(number)
输出结果同上。
注意:生成器推导式是使用(),其他基本结构跟列表推导式一样。
总结
到此这篇关于python推导式的使用方法的文章就介绍到这了,更多相关python推导式使用内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。