设为首页 收藏本站
查看: 739|回复: 0

[经验分享] python --012--推导式

[复制链接]

尚未签到

发表于 2018-8-6 09:49:43 | 显示全部楼层 |阅读模式
  Python的推导式
  python的推到式(列表推导式,字典推导式,集合推导式)
  推导式:comprehensions(解析式)
  是python中独特的特性,推到式是可以从一个数据结构序列构件另外一个数据
  

    三种推导式  1、列表推导式
  2、字典推导式
  3、集合推导式
  

  ·列表推导式
  1、使用[]生成一个列表list
  基本格式
  v(变量) = [每一个元素的运算法则 for 变量 in 可迭代对象 if布尔表达式]
  1、运算法则:表达式  / 函数(有返回值)
  2、for 变量 in 刷卡迭代对象:每一次迭代出的元素,赋值给变量
  列表中的元素——->表达式--->元素
  

    l=[i+1 for i in range(10)]  print l#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  

  3、if 布尔表达式:根据条件过虑值
  注意:if 判断可以省略不做任何判断,其他部分不能省略
  

    l=[i for i in range(10) if i%2==0]  print l#[0, 2, 4, 6, 8]
  

DSC0000.jpg

  2、使用()生成generator生成器
  generator:生成器
  

l=(fun(i) for i in range(31) if i%3==0)  
print l#<generator object <genexpr> at 0x052DAA08>
  
print type(l)#<type 'generator'>生成器
  

  生成器不会把结果保存在一个序列中,而是保存生成器的状态,在每一次
  迭代的时候,返回一个值,直到遇到stopiteration异常结束。
  列表推导式与生成器的区别:
  

1、通过推导式直接创建所有的元素,占用空间大  
2、生成器相当于一个工具,创建列表的工具,更加省空间,用多少创建多少,只要不要超过上限
  

  特点
  

1、生成器本质也是一个可迭代对象(利用for循环进行遍历,for循环会调用next()方法)  
2、next():调用n次next的方法,创建n个元素
  

  
l2=(i for i in range(100))
  
print l2#<generator object <genexpr> at 0x052DAA08>
  
l2.next()#0
  
l2.next()#1
  
l2.next()#2
  

  字典推导式:
  字典推导式和列表推导式使用方法类似
  创建形式:
  

变量={ 键:值 for 变量 in 可迭代对象 if 布尔表达式}  

  键值:可以是表达式,也可以是一个函数(有返回值的函数)
  

d={str(i):i**2 for i in range(10) if i%3==0}  
d#{'9': 81, '0': 0, '3': 9, '6': 36}
  

  
#给定一个字典d1={'one':1,'two':2,'three':3}请转换字典中的键与值
  

  
d1 #{1: 'one', 2: 'two', 3: 'three'}
  for i in d1.iteritems():
  #iteritems()返回键值对 ,如果直接在d1中可迭代,只是返回键。
  print i#返回('three', 3) ('two', 2) ('one', 1)
  for key,value in d1.iteritems():
  print key,value#返回   three 3 two 2  one 1
  

  d1={value:key for key,value in d1.iteritems()}
  print d1#{1: 'one', 2: 'two', 3: 'three'}
  

  集合推导式
  定义形式:
  

     变量={ 表达式 for 变量 in 可迭代对象 if 布尔表达式}  

  表达式:可以是普通表达式,也可以是一个函数(带有返回值的函数)
  

s={ i for i in range(10)if i%2==0}  
print s#set([0, 8, 2, 4, 6])

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-547412-1-1.html 上篇帖子: Python常用的数据类型 下篇帖子: 用python实现调用jar包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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