Python高级编程

高级编程

推导式

列表推导式

  • 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表
  • 语法:
    [表达式 for 变量 in 旧列表]
    [表达式 for 变量 in 旧列表 if 条件]
    
  • 代码演示:
    # 求一到二十能被三整除的数
    list3=[i for i in range(1,21) if i%3==0]
    print(list3)
    
    # 执行结果:
    [3, 6, 9, 12, 15, 18]
    

字典推导式

  • 字典推导式与列表推导式大同小异,不同之处在于字典推导式第一个表达式由两部分构成,因为字典的一个元素由key:value构成。
  • 需要注意的是由于字典key值不重复性,新生成的字典如果key值有重复的话,将会被删除掉,如下例所示,name中原本有两个lilei,但是在新生成的字典用,仅保留了一个。
  • 语法:
    '''
    语法一:
        key:字典中的key
        value:字典中的value
        dict.items():序列
        condition:条件表达式
        key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理 
        value_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
    '''
     
    {
           key_exp:value_exp for key,value in dict.items() if condition}
     
    '''
    语法二:
        key:字典中的key 
        value:字典中的value 
        dict.items():序列 
        condition:条件表达式 
        key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理 
        value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理
        value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理
     
    '''
     
    {
           key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
    
  • 代码演示:
    # 获取字典中key值是小写字母的键值对
    dict1 = {
           "a":10,"B":20,"C":True,"D":"hello world","e":"python教程"}
    dict2 = {
           key:value for key,value in dict1.items() if key.islower()}
    print(dict2)
     
    # 将字典中的所有key设置为小写
    dict3 = {
           key.lower():value  for key,value in dict1.items() }
    print(dict3)
     
    # 将字典中所有key是小写字母的value统一赋值为'error'
    dict4 = {
           key:value if key.isupper() else "error" for key,value in dict1.items() }
    print(dict4)
    
    # 执行结果:
    {
           'a': 10, 'e': 'python教程'}
    {
           'a': 10, 'b': 20, 'c': True, 'd': 'hello world', 'e': 'python教程'}
    {
           'a': 'error', 'B': 20, 'C': True, 'D': 'hello world', 'e': 'error'}
    

元组推导式

  • 元组推导式类似于列表推导式,只需将列表推导式中的中括号 ‘[]’ 修改为小括号 '()'即可。例如,生成一个包含10个
  • 语法
    (表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
    
  • 代码演示
    • 使用 tuple() 函数,可以直接将生成器对象转换成元组,例如:
      a = (x for x in range(1,10))
      print(tuple(a))
      
      执行结果:
      (1, 2, 3, 4, 5, 6, 7, 8, 9)
      
    • 直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:
      a = (x for x in range(1,10))
      for i in a:
          print(i,end=' ')
      print(tuple(a))
      
      执行结果:
      1 2 3 4 5 6 7 8 9 ()
      
    • 使用 _next _() 方法遍历生成器对象,也可以获得各个元素,例如:
      a = (x for x in range(3))
      print(a.__next__())
      print(a.__next__())
      print(a.__next__())
      a = tuple(a)
      print("转换后的元组:",a)
      
      执行结果:
      0
      1
      2
      转换后的元组: ()
      

集合推导式

  • 集合推导式的语法格式和字典推导式完全相同
  • 语法:
    {
            表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }
    
  • 代码演示:
    tupledemo = (1,1,2,3,4,5,6,6)
    setnew = {
           x**2 for x in tupledemo if x%2==0}
    print(setnew)
    		
    执行结果:
    {
           16, 4, 36}
    

生成器

  • 通过推导式的方式生成
    • 代码演示:
      g = (x * 3 for x in range(10))
      print(g)
      
      执行结果:
      <generator object <genexpr> at 0x0000019B3EE5C120>
      
  • 通过函数的方式
    • 代码演示:
      def fu():
          n = 0
      	while True:
      		n += 1
      		yield n
      print(fu())
      
      执行结果:
      <generator object fu at 0x0000020FD315C120>
      

迭代器

  • 关系对应图
    Python高级编程_第1张图片
  • 迭代器
    • 迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,指导所有元素被访问完结束。
    • 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
    • 生成器是可迭代的,也是迭代器
    • 列表是可迭代的,但不是迭代器
    • 通过iter()函数可以将可迭代的变成一个迭代器
  • 代码演示:
    • 字符串,列表或元组对象都可用于创建迭代器:
      list=[1,2,3,4]
      it = iter(list)    # 创建迭代器对象
      print (next(it))   # 输出迭代器的下一个元素
      print (next(it))
      
      执行结果:
      1
      2
      
    • 迭代器对象可以使用常规for语句进行遍历:
      list=[1,2,3,4]
      it = iter(list)    # 创建迭代器对象
      for x in it:
      	print (x, end=" ")
      
      执行结果:
      1 2 3 4
      
    • 迭代器对象可以使用 next() 函数:
      import sys         # 引入 sys 模块
      	
      list=[1,2,3,4]
      it = iter(list)    # 创建迭代器对象
      
      while True:
      	try:
      		print (next(it))
      	 except StopIteration:
      		sys.exit()
      
      执行结果:
      1
      2
      3
      4
      

你可能感兴趣的:(Python基础,python)