iojsioi 发表于 2018-8-6 09:49:43

python --012--推导式

  Python的推导式
  python的推到式(列表推导式,字典推导式,集合推导式)
  推导式:comprehensions(解析式)
  是python中独特的特性,推到式是可以从一个数据结构序列构件另外一个数据
  

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

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

    l=  print l#
  

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

    l=  print l#
  


  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 2one 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()
页: [1]
查看完整版本: python --012--推导式