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)
  • 相关阅读:
    android(eclipse)界面控件以及活动总结(二)
    android(eclipse)新手常见问题总结(一)
    易 忽略 知识 点
    switfmailer 邮件时间错误 处理
    error_log
    $_SERVER['URI']
    apache 服务器配置
    sock
    __autolaod
    delete CDU
  • 原文地址:https://www.cnblogs.com/zichuan/p/10040126.html
Copyright © 2011-2022 走看看