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)
  • 相关阅读:
    Java核心技术第四章----对象与类重难点总结
    Java核心技术第三章----Java的基本程序设计结构重难点总结
    IDEA Invalid bound statement (not found)
    安利一个免费下载VIP文档神器
    灵魂拷问--你是什么垃圾?垃圾分类找人工智障!!!让你再也不拍大妈的灵魂拷问
    JavaWeb无框架,借助反射采用精巧设计模式实现放微信PC聊天页面
    JavaWeb购物车
    来自大专生的些许感悟
    2021 第二轮省队集训 Day5
    2021 第二轮省队集训 Day2
  • 原文地址:https://www.cnblogs.com/zichuan/p/10040126.html
Copyright © 2011-2022 走看看