zoukankan      html  css  js  c++  java
  • 09-Python基础之内置函数与匿名函数

    python基础之内置函数与匿名函数

    内置函数68个如下图

     

    重点的关注的内置函数len,sorted,enumerate,all,any,zip,filter,map,reversed,slice      

    len(o):参数为O,返回数据类型的长度
    sorted():      sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
          iterable:是可迭代类型; cmp:用于比较的函数,比较什么由key决定;
          key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项
          reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,默认升序。
          返回值:返回一个排序后的列表(字典是按键值排序后的元组组成的列表)
          常用在字典排序,按键排序或者按值排序
    enumerate(): 枚举,获取可迭代对象的索引值

    all():用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,
       否则返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
    any():判断x对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true
    zip():接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表,
    reversed():反转
    slice():切片
    map():接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
    filter():接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    内置函数的练习sorted,enumerate,zip,filter,map,reversed,slice

    #字典排序
    '''
    原理:
    1.按健排序   dict_keys
    2.按值排序   dict_values
    3.按键值中的健或值排序   dict_items ,将键值转为元组存在list,key选择按第一个还是第二个排序。
    '''
    dic = {'a':2,'b':4,'f':7,'d':6,'e':8}
    print(dic.keys())    #dict_keys(['a', 'b', 'd', 'e'])
    print(dic.values())  #dict_values([2, 4, 6, 8])
    print(dic.items())  #dict_items([('a', 2), ('b', 4), ('d', 6), ('e', 8)])
    li3 = sorted(dic.keys(),)       #['a', 'b', 'd', 'e', 'f']
    li4 = sorted(dic.values())      #[2, 4, 6, 7, 8]
    li5 = sorted(dic.items(),key=lambda x:x[0])  #[('a', 2), ('b', 4), ('d', 6), ('e', 8), ('f', 7)]
    
    #enumerate:获取可迭代对象中元素的索引值,
    l = [3,5,6,2,9,'q','w','c']
    for index,k in enumerate(l):
        print('index = %s,k = %s'%(index,k))
    
    '''
    打印:
    index = 0,k = 3
    index = 1,k = 5
    index = 2,k = 6
    index = 3,k = 2
    index = 4,k = 9
    index = 5,k = q
    index = 6,k = w
    index = 7,k = c 
    '''
    
    #zip将两个或者多个可迭代对象相同的索引值取到一起,返回一个zip object,需要for循环取值
    
    l = [4,3,6,5]
    l1 = ['q','w','e']
    
    l_li = zip(l,l1)
    print(l_li)
    for i in l_li:
        print(i)
    '''
    i遍历为:   
    (4, 'q')
    (3, 'w')
    (6, 'e')
    '''
    
    #filter
    
    # 格式
    def func(i):
        return i%2 ==0
    li6 =list(filter(func,range(10)))     #[0, 2, 4, 6, 8] 满足留下,不满足舍去
    print(li6)
    
    # map   map(func,iter):iter经func后返回一个对象
    def pow2(i):
        return i*i
    l =[1,2,3,6,5,7]
    li7 = list(map(pow2,l))
    print(li7)          #[1, 4, 9, 36, 25, 49],map(func,L)

    匿名函数

    函数名 = lambda 参数 :返回值
    
    #参数可以有多个,用逗号隔开
    #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    #返回值和正常的函数一样可以是任意数据类型
    
    
    add = lambda x,y:x+y
    print(add(3,4))

    习题:

    求10-100000内每位加起来等于5的数,如14,23。。。。10023等,

    请先思考再看答案,提示:可以先写个分解函数,将拆分的数字家和为5的筛选出来。这是基础的

    #第一种常规解法
    def split_num(i):
        strnum = str(i)
        sum = 0
        for i in strnum:
            i =int(i)
            sum += i
        return sum
    num_list = []
    for i in range(10,100000):
        nums = split_num(i)
        if nums == 5:
            num_list.append(i)
    for i in num_list:
        print('%5s'%i,end=',')
        if (num_list.index(i)+1)%10 == 0:
            print()
    print('
    总计有%s个'%len(num_list))
    #充分利用内置函数
    ls = [x for x in range(10,100000) if sum(map(int,str(x)))==5]
    for k,v in enumerate(ls):
        print('%5s'%v,end=',')
        if (k+1) % 10 == 0 :
            print()
    print('
    总共有%s个'%len(ls))
    View Code
    自学课程参照老男孩全栈视频
  • 相关阅读:
    闪电侠 Netty 小册里的骚操作
    面试被问烂的 Spring IOC(求求你别再问了)
    面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
    使用 Cglib 实现多重代理
    Redis 初次见面
    Apollo 10 — adminService 全量发布
    Apollo 9 — adminService 主/灰度版本发布
    简析限流算法
    Dubbo 源码分析
    Dubbo 源码分析
  • 原文地址:https://www.cnblogs.com/chenrongjin/p/10024138.html
Copyright © 2011-2022 走看看