zoukankan      html  css  js  c++  java
  • day18 内置函数和匿名函数

    一、内置函数的复习

     1、三种从迭代器中取值的方法

    #1、 print(list(ret))
    #2、 next,__next__
    #3、 for

    2、相关内置函数

    (1)reversed和reverse的区别

    l=[1,2,3,54,6,3]
    ret=reversed(l)
    print(ret)
    print(list(ret))
    #两者的区别,reversed返回迭代器,不返回原来的列表,
    # 不改变原来的列表,生成一个新的序列迭代器
    # (一个一个取值的时候节省内存)
    l.reverse()
    print(l)
    #reverse 返回None 是在原本的基础上修改的

    (2)slice  切片

    l=[1,2,3,54,6,3,5,6,3]
    l1=slice(3,6,2)  #l[3:6:2] 语法糖
    print(l[l1]) #[54, 3]

    3、字符串

    (1)format

    print(format("test","<20"))   #左对齐
    print(format("test",">20"))    #右对齐
    print(format("test","^20"))     #居中对齐

    整型数字可以提供的参数

    浮点数可以提供的参数

    计数方法

    (2)bytes

    #网络编程的时候,能在网络上传递的必须是字节
    ret=bytes("你好",encoding="utf-8")
    #中间是网络传输过程
    print(ret.decode(encoding="utf-8"))

    (3)bytearrary

    ret=bytearray("alex",encoding="utf-8")
    # 对比较长的字符串做修改是,指定某一处进行修改,不会改变这个bytearray的内部地址
    print(id(ret))   #35639960
    print(ret[0])  #97
    ret[0]=65
    print(ret)   #bytearray(b'Alex')
    print(id(ret))  #35639960

    (4)menmoryview

    # menmoryview 只能对bytes切片
    ret=memoryview(bytes("你好",encoding="utf-8"))
    print(ret) #
    print(len(ret)) #6
    print(ret[:3]) #
    print(bytes(ret[:3]).decode("utf-8")) #
    print(bytes(ret[3:]).decode("utf-8")) #

    (5)ord    字符按照Unicode转数字

            chr  数字按照Unicode转字符

    print(ord("a")) #97
    
    print(chr(97)) #a

    (6)ascii  只要是ascii码中的内容,就打印出来,不是就转换成u

    print(ascii("a")) #'a'
    
    print(ascii(34)) #34

     (6)reper 做字符串拼接的时候使用

    print(repr("1"))  #'1'
    print(repr("name:%r"%("金老板")))  #"name:'金老板'

    4、数据集合

    (1)dict  字典

      (2)set

      (3) frozenset  转变成可哈希的(不可变的类型)

    5、相关内置函数

      (1)len

      (2)enumerate  枚举

    l=["笔记本","phone","apple","banana"]
    for j,i in enumerate(l,1):
    print(j,i)

      (3)all

    print(all([1,2,3,4,0]))  #False
    print(all([1,2,3,4]))  #True
    print(all([1,2,3,None])) #False
    print(all([1,2,3," "])) #True

       (4)any

    与开始的数据有关系
    print(any([True,None,False]))   #True
    print(any([False,None,False]))  #False

      (5)zip

    print(list(zip([1,2,3,4],[2,3,4,5])))
    # [(1, 2), (2, 3), (3, 4), (4, 5)]

      (6)filter   过滤函数,例子求列表中大于10的元素

    def is_odd(x):
        if x>10:
            return True
    ret=filter(is_odd,[1,2,3,4,23,45,6,123])
    print(list(ret))
    #[23, 45, 123]
    求列表中大于10 的数字
    # filter 就是一个可迭代对象,想要有一个新的内容集,是从原可迭代对象中筛选出来的
    def is_not_empty(s):
        return s and s.strip()
    ret=filter(is_not_empty,["1sad","  sdsf"," ","sfdsgf"])
    print(list(ret))
    利用filter删除空字符串
    import math
    def is_sqr(x):
        return math.sqrt(x)%1==0
    ret=filter(is_sqr,range(1,101))
    print(list(ret))
    过滤1~100中平方根是整数的数

      (7)map

    fliter和map

    参数很相:都是一个函数名+可迭代对象

    返回值页很相近,都是返回可迭代对象

    区别:

    filter 是做筛选的,结果还是原来在可迭代对象中的项

    map 是对可迭代对象中的每一项做操作的,结果不一定是原来在可迭代对象中的项

    # 返回绝值,新内容等于原内容的个数
    ret=map(abs,[-1,-3,-6,3,54,6])
    print(list(ret))
    # [1, 3, 6, 3, 54, 6]
    def func(x):
        return x**2
    ret=map(func,[1,2,3,4])
    print(list(ret))
    # [1, 4, 9, 16]
    求各项的平方

     (8)sorted  

      sort一个直接修改原列表的顺序,节省内存

         sorted 是生成一个新的列表,不改变原来的列表

        key=func

    print(sorted([-2,-3,2,3],reverse=True))  #[3, 2, -2, -3]
    print(sorted([1,2,3,-4,-23,34],key=abs))  #[1, 2, 3, -4, -23, 34]
    print(sorted(([1,322,34,23],"ssd"),key=len))  #['ssd', [1, 322, 34, 23]]
    使用默认函数

     新内容:匿名函数

    例子:

    # 第一种
    def add1(x,y):return x+y
    ret=add1(3,2)
    print(ret)
    # 第二种
    add=lambda  x,y:x+y
    print(add(1,2))
    函数和匿名函数的对比例子
    dic={"k1":10,"k2":100,"k3":30}
    print(max(dic.values()))  #100
    print(max(dic))   #k3
    print(max(dic,key=lambda k:dic[k])) #k2
    求字典中的最大值
    def func(x):
        return x**2
    
    ret=map(lambda x:x**2,[1,2,3,4,5])
    print(list(ret))
    使用map求平方
    def func(num):
        return num>99and num<1000
    ret=filter(func,[124,3,5456,456,12])
    print(list(ret))
    # [124, 456]
    ret2=filter(lambda num:(num>99 and num<1000),[124,3,5456,456,12,243])
    print(list(ret2))
    # [124, 456, 243]
    def func(num1):
        if num1>10:
            return True
    ret=filter(lambda  num1:num1>10,[1,23,34,12,2])
    print(list(ret))
    # [23, 34, 12]
    ret1=filter(lambda num:True if num>10 else False,[1,2243,354,4,5,34])
    print(list(ret1))
    # [2243, 354, 34]
    使用filter 

    比较常用的max  min  map  filter

     面试题:

    1、

    d=lambda p:p*2
    t=lambda p:p*3
    x=2
    x=d(x)
    x=t(x)
    x=d(x)
    print(x)

    2、现有两元组是((“a”),(“b”)),(("c'),("d")),

     请使用python中匿名函数生成列表[{'a': 'c'}, {'b': 'd'}]

    t1=(("a"),("b"))
    t2=(("c"),("d"))
    #t3=zip(t1,t2)
    print(list(map(lambda  t:{t[0]:t[1]},zip(t1,t2))))
    # [{'a': 'c'}, {'b': 'd'}]

     3、

    def multipliers():
        return (lambda x:i*x for i in range(4))
    print([m(2) for m in multipliers()])
    # [0, 2, 4, 6]

  • 相关阅读:
    BZOJ1527 : [POI2005]Pun-point
    2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
    2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)
    NAIPC-2016
    BZOJ2498 : Xavier is Learning to Count
    ACM ICPC Vietnam National Second Round
    XVI Open Cup named after E.V. Pankratiev. GP of Ukraine
    XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
    HDU5509 : Pattern String
    BZOJ4583 : 购物
  • 原文地址:https://www.cnblogs.com/number1994/p/8011625.html
Copyright © 2011-2022 走看看