zoukankan      html  css  js  c++  java
  • 20-高级特性之内建方法(1)

    map,reduce, filter, sorted

    map(function, sequence[, sequence, ...])根据提供的函数对指定序列做映射

    • 第一个参数为一个函数对象(比如lambda表达式,比如一个普通函数)
    • 第二个(或者更多)参数接收一个Iterable对象
    • I中每一个元素执行f,得到f(I(i))
    • 把所有f(I(i))拼接成一个Itrator,返回出去
    • 因为Iterator是惰性序列,需要用list()或者for迭代出来
    #函数需要一个参数
    m = map(lambda x: x*x, [1, 2, 3])
    print(m,'
    ')#结果为:[1, 4, 9]
    print(list(m),'
    ')#结果为:[1, 4, 9]
    
    #函数需要两个参数
    m = map(lambda x, y: x+y, [1, 2, 3], [4, 5, 6])
    print(list(m),'
    ')#结果为:[5, 7, 9]
    
    def f1( x, y ):
      return (x,y)
    l1 = [ 0, 1, 2, 3, 4, 5, 6 ]
    l2 = [ 'Sun', 'M', 'T', 'W', 'T', 'F', 'S' ]
    l3 = map( f1, l1, l2 )
    print(list(l3)) #结果为:[(0, 'Sun'), (1, 'M'), (2, 'T'), (3, 'W'), (4, 'T'), (5, 'F‘),(6, 'S’)]
    

    reduce(function, sequence[, initial])对参数序列中元素进行累积

    • 第一个参数为一个函数对象(比如lambda表达式,比如一个普通函数)
    • 第二个参数(或者更多)接收一个Iterable对象
    • reduce(f,[x1,x2,x3,x4]) 等价于 f(f(f(x1,x2),x3),x4)
    • 很特殊的是,返回一个非Iterator的Iterable对象,即直接一次性获得所有结果{直接可打印输出}
    #在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在functools模块里
    #reduce返回的是一个非Iterator的Iterable,所以直接打印输出
    from functools import reduce
    r = reduce(lambda x, y: x+y, [1,2,3,4]) #10
    print(r,'
    ')
    r = reduce(lambda x, y: x+y, [1,2,3,4],5) #15
    print(r,'
    ')
    r = reduce(lambda x, y: x+y, ['aa', 'bb', 'cc'], 'dd') #'ddaabbcc'
    print(r,'
    ') 
    

    filter(function or None, sequence)对指定序列执行过滤操作

    • 第一个参数为一个函数对象(比如lambda表达式,比如一个普通函数)
    • 第二个参数(或者更多)接收一个Iterable对象
    • 对I中没一个元素执行f,得到f(I(i))。根据f(I(i))的返回值是True或False来决定是否保留I(i)。起到过滤器的功能。
    • 把过滤后的I(i)拼接成一个Itrator,返回出去
    • 因为Iterator是惰性序列,需要用list()或者for迭代出来
    f = filter(lambda x: x%2, [1, 2, 3, 4])
    print(list(f),'
    ')
    f = filter(None, "hello")
    print(list(f),'
    ')
    

    sorted

    • 传入一个Iterable对象I和排序参数 [key=..., reverse=.. ] #命名关键字参数

    • {注意key参数可以传入一个自定义函数f} 等价于 对每一个I(i)都先执行f,再对f(I)进行排序,最后把这个f(I)的顺序映射到I

      1.普通数值型

      L1 = [36,5,-12,9,-21]
      L1 = sorted(L1)
      print(L1,' ')
      L1 = sorted(L1, key=abs)
      print(L1,' ')
      L1 = sorted(L1, key=abs, reverse=True)
      print(L1, ' ')

      2.普通字符串

      L2 = ['bob', 'about', 'Zoo', 'Credit'] #依据ASCI码
      L2 = sorted(L2) #没有忽略大小写 A<a{就ASCI而言}
      print(L2,' ')
      L2 = sorted(L2, key=str.lower) #把所有str都lower或者upper,即忽略大小写
      print(L2, ' ')
      L2 = sorted(L2, key=str.upper, reverse=True)
      print(L2, ' ')

      3作业:根据名字对T进行排序

      L3 = [('Bob', 75),('Adam', 92),('Bart', 66),('Lisa', 88),('haoZhang',22)] #list里面嵌套tuple
      def fn(t): #传入一个tuple
      return t[0].lower() #返回名字的小写后的字符串
      L3 = sorted(L3, key=fn)
      print(L3,' ')
      L3 = sorted(L3, key=fn, reverse=True)
      print(L3, ' ')

      根据分数进行排序

      def fn_score(t):
      return t[1]
      L3 = sorted(L3,key=fn_score,reverse=True)
      print(L3,' ')

    匿名函数

    • 1.lambda表达式即为一个匿名函数
    • 2.注意两点:
    • lambda不能写return,表达式的结果即为返回值
    • lambda本质上是个函数对象,所以可以用来当参数使:被赋给其他变量,被传入函数,或者被返回
    f = lambda x: x*x
    print(f,'
    ')
    print(f(2),f(4),'
    ')
    
    def fn(x,y):
        return (lambda x,y: x*x+y*y)
    f2 = fn(3,4)      #只是返回一个函数
    print(f2,'
    ', f2(3,4),'
    ') #f2(3,4)才是调用了函数
    
    #得到[1,20)的所有奇数
    L = list(filter((lambda x: x%2==1), range(1,20)))
    print(L,'
    ')
  • 相关阅读:
    iOS-AVPlayer
    简单认识一下什么是闭包
    你珍惜一个人,一定是感动过
    用户关闭浏览器页器,弹出一个提示
    Html5 小球键盘移动
    HTML坦克大战学习01
    關於 WebClient wc = new WebClient() 下載第三方數據不能進安安信任異常
    封装自己的yQuery
    js彈出層或者js彈出引用url Frame 層
    动态创建表单模拟提交
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504478.html
Copyright © 2011-2022 走看看