python入门超easy系列(六)——— 列表生成器、迭代器以及高级函数

正如python入门超easy系列(二)中所说,玩转列表即玩转python

众所周知,python是世界上入门最简单的语言!?——周某人


列表生成器

  • 使用场景:在使用列表时,很多时候我们不会一下子使用数据,通常都是一个一个使用;当数据量较大的时候,定义一个列表会是程序内存占用突然增大,为了解决此类问题,python中引入了生成器。
  • 生成方式
    • 方式一:将列表生成式的[]改成()即可

      # 列表生成式
      lt = [i for i in range(10)]
      print(lt)
      
      # 列表生成器
      lt = (i for i in range(3))
      print(lt)
      
      # 可以转换为列表
      # print(list(lt))
      
      # 可以进行遍历
      # for i in lt:
      #     print(i)
      
    • 方式二:在函数中使用yield关键字

      def test(n):
          for i in range(1, n+1):
            	# 执行到此处,函数会返回yield后的内容,然后会停止在这里
            	yield i
              
      t = test(3)
      # print(t)
      
      # 可以一个一个提取
      print(next(t))
      print(next(t))
      
  • 使用说明
    • 生成器对象保存的是特定数据的生成算法,而不是特定的所有数据
    • 使用任意一种方式操作都是单次的
    • 生成器可以做的操作:遍历、next、转换为列表

可迭代对象 (Iterable_object)

在介绍可迭代对象之前,我们需要了解什么是迭代器(Iterator)

  • 迭代器的定义:能够使用for-in进行遍历,并且可以使用next函数进行迭代的对象
  • 说明:
    • 生成器就是一种特殊的迭代器

    • 判断一个对象是否是迭代器

      from collections import Iterator
      # 判断是否是迭代器
      print(isinstance(lt, Iterator))
      
    • 字符串以及容器类型的对象都不是迭代器,但是它们都是可迭代对象

可迭代对象
  • 定义:可以使用for-in遍历的对象,都是可迭代对象
  • 说明:
    • 前面学习过的字符串以及容器类型的对象都是可迭代对象

    • 迭代器一定是可迭代对象

    • 判断一个对象是否是可迭代对象:

      from collections import Iterable, Iterator
      
      lt = [1, 2, 3]
      
      # 判断是否是可迭代对象
      print(isinstance(lt, Iterable))
      # 判断是否是迭代器
      print(isinstance(lt, Iterator))
      
    • iter:可以将可迭代对象转换为迭代器:

      lt = [1, 2, 3]
      
      # 将可迭代对象转换为迭代器
      lt2 = iter(lt)
      

高级函数

有了以上迭代器和可迭代对象的知识的支撑,我们可以学习一个很炫酷的东西叫做高级函数

map
  • 参数:

    func:一个函数
    iter:一个可迭代对象
    
  • 功能:将可迭代对象遍历,每个元素都使用该函数处理一遍,然后返回,保存这种算法的迭代器

  • 使用:

    from collections import Iterator
    lt = [1, 2, 3, 4, 5]
    
    def pingfang(n):
        return n * n
    
    # 返回map对象,是一个迭代器
    # ret = map(pingfang, lt)
    
    ret = map(lambda x: x*x, lt)
    print(isinstance(ret, Iterator))
    print(list(ret))
    
  • 举例:使用map函数:将一个元素全是字符串的列表进行处理,去掉两边空白,然后首字符大写:(Tips:相关字符串操作函数,结尾总结)

    string = ["  asdaasd123456dsdaad  ", " 54df5as3d5f4     "]
    
    ret = map(lambda x: (x.strip(' ')).capitalize(), string)
    print(list(ret))
    
filter
  • 参数:

    function:一个函数
    iterable:可迭代对象
    
  • 功能:使用function依次作用于可迭代对象中的每个元素,当返回结果为True时保留该元素。返回filter对象,是一个迭代器。

  • 示例:

    lt = [1, 2, 3, 4, 5]
    
    def oushu(n):
    	return n%2 == 0  
    
    # 返回filter对象,是一个迭代器
    # ret = filter(oushu, lt)
    
    ret = filter(lambda x: x%2 != 0, lt)
    print(ret)
    print(list(ret))
    
  • 举例:使用filter函数,提取一个任意列表中长度大于3的字符串元素。

    string = [
        "sdfasdfasdf",
        "sdf",
        "ds",
        "dsfasdfs"
    ]
    
    ret = filter(lambda x: len(x) > 3, string)
    print(list(ret))
    
reduce
  • 参数:

    function:一个函数
    sequence:一个序列
    
  • 功能:

    • 首先从序列中取出前两个元素,作为function的参数处理一下
    • 处理完的结果与下一个元素再使用function处理一下
    • 处理结束,将处理完的结果返回
  • 示例:

    from functools import reduce
    
    lt = [1, 2, 3, 4, 5]
    
    def add(a, b):
    	return a + b
    
    # 方法一:
    # ret = reduce(add, lt)
    # ret = reduce(lambda x, y: x*y, lt)
    
    # 方法二
    ret = reduce(lambda x, y: x*10 + y, lt)
    print(ret)  
    
  • 举例:使用reduce函数实现,求一个列表中所有元素的乘积

    from functools import reduce
    
    lt = [1, 2, 3, 4, 5]
    def add(a, b):
        return a + b
    
    ret = reduce(lambda x, y: x * y, lt)
    print(ret)
    

零碎小知识(字符串函数的补充)

  • strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

  • 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

  • 示例:

    string = "asdaasd123456dsdaad"
    print(string.strip("asd"))
    # out: 123456
    
    print(string.lstrip("asd"))
    # out:123456dsdaad
    
    print(string.rstrip("asd"))
    # out:asdaasd123456
    

下期预告:下一期将讲解Python入门中比较有意思的面向对象知识点。
Tips:如有疑问欢迎随时打扰 ???

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值