zoukankan      html  css  js  c++  java
  • Python学习笔记系列——高阶函数(filter/sorted)

    一、filter

    #filter()函数用于过滤序列。和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素。
    #filter()函数返回的是一个Iterator,即惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
    def odd(n):
        return n%2==1
    ms=list(filter(odd,[1,2,3,4,5,6,7,8,9,10])) #保留奇数
    print(ms)
    
    #一、过滤空字符串
    def not_empty(s):
        return s and s.strip()
    ms=list(filter(not_empty,['Zc',' ','BOOM',None,'BLOG']))
    print(ms)
    
    #二、生成范围素数数组
    #构造一个从3开始的奇数序列
    def _odd_iter():
        n=1
        while True:
            n=n+2
            yield n
    #筛选函数
    def _not_divisible(n):
        return lambda x:x % n !=0
    #定义一个生成器,不断返回下一个素数
    def primes():
        yield 2
        it = _odd_iter()  #初始序列
        while True:
            n=next(it)  #返回序列的第一个数
            yield n
            it = filter(_not_divisible(n),it)  #构造新序列
    #输出1000以内的素数
    for n in  primes():
        if n <1000:
            print(n)
        else:
            break

    上面这个用生成器写素数数组的,我这种菜鸡是真的看不懂,没思路。下面是找群里某蓝色兔头专业代言雀巢咖啡三十年的java&Python双料大佬给我写了个简单的:

    def test(num):
        num_list = [True] * num
        num_list[0] = False
        for i in range(2, num+1):
            for j in range(i+i, num+1, i):
                num_list[j-1] = False
        return [x+1 for x in range(len(num_list)) if num_list[x]]
    
    print(test(100))

    二、sorted

    #sorted()可以对list进行排序,还可以接收一个key()函数实现自定义排序.
    #key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
    ms=sorted([35,-9,-20,23,2],key=abs)  #按绝对值大小排序
    
    #默认情况下,对字符串排序,是按照ASCII的大小来比较的
    ms1=sorted(['boom','axure','Zero','Cat'])                     #['axure', 'boom', 'Cat', 'Zero']
    ms2=sorted(['boom','axure','Zero','Cat'],key=str.upper)       #['Zero', 'Cat', 'boom', 'axure']
    
    #反向排序,加参数reverse
    ms3=sorted(['boom','axure','Zero','Cat'],key=str.upper,reverse=True)

     三、练习

    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    #按照名字排序
    def by_name(n):
        return n[0]
    print(by_name(L))
    L2 = sorted(L, key=by_name)
    print(L2)
    
    #按照成绩降序
    def by_score(n):
        return n[1]
    L2 = sorted(L, key=by_score,reverse=True)
    print(L2)
  • 相关阅读:
    mysql 注意事项 PreparedStatement 对比 statement
    Dbutils commons-dbutils-1.3
    C3P0 mysql 5.7
    servlet-应用mysql-1
    javabean 用integer 而不是int
    servlet-1
    servlet 路径 编码 问题
    mac tomcat 9.0
    case end 的用法
    自定义抛出异常
  • 原文地址:https://www.cnblogs.com/zichuan/p/10040126.html
Copyright © 2011-2022 走看看