python2020-6-17笔记-六剑客

    技术2024-10-21  53

    Python 六剑客

    Map():根据提供的函数对指定序列做映射,第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表,形如:map(function,’xxxx’)#举个栗子:map(str.lower,"SBUBbh")

    Filter():函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

     

    Reduce():函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

     推导列表Lamda切片

     

    Map用法

    ord("a")#可以算出小写的字母对应的ASCII码

    ord('a')-ord('A')#可以计算大小写的字母对应的ASCII码之差

    Chr(90):大写的ASCII码转化为大写字母

    #题目s="abcdefg"转化为大写

    s="abcdefgh"

    result=""

    for i in s:

        result+=chr(ord(i)-32)#ord(i)将小写的字母对应的ASCII码

                         #-32表示将小写的字母变为对应的大写ASCII码

                         #chr把大写的ASCII码转化为大写字母

    print (result)

    ...#1

    def convert(letter):

        return chr(ord(letter)-32)

     

    #print(map(convert,"weerrfs"))#输出结果:<map object at 0x00000188E1A76CD0>

    ...#2

    def convert(letter):

        return chr(ord(letter)-32)

    #print(list(map(convert,"sdiji ")))#输出结果:['S', 'D', 'I', 'J', 'I', '\x00']#放进一个list里面,list也可以替换成tuple

    #print(tuple(map(convert,"sdnin")))#list也可以替换成tuple,放进一个tuple里面,

    ...#3,以上1,2是到3的主见演化过程

    def converse(letter):

        return chr(ord(letter)-32)

    #print("".join(list(map(convert,"sdninsain"))))#输出结果:SDNINSAIN

    #print("".join(tuple(map(convert,"asjhih"))))#””.join要list或者tuple连起来

    ...

    举个栗子:

    list(map(str.lower,"SBUBbh"))#list存放大写转小写

    >>>['s', 'b', 'u', 'b', 'b', 'h']

    tuple(map(str.lower,"asnjGSHH"))#tuplet存放大写转小写

    >>>('a', 's', 'n', 'j', 'g', 's', 'h', 'h')

    list(map(str.upper,"asnj"))#list存放小写转大写

    >>>['A', 'S', 'N', 'J']

    tuple(map(str.upper,"JInjsn"))#tuple存放小写转大写

    >>>('J', 'I', 'N', 'J', 'S', 'N')

    filter用法说明

    ...#1

    def get_upper_letter(letter):

        if letter>='A' and letter<='Z':

           return True

        else:

            return False

    #print (filter(get_upper_letter,"asJJKK"))#输出结果:<filter object at 0x000001AAC1356CD0>

    #6个字母。每个字母会分别代入到一次定义函数get_upper_letter,如果函数返回true

    #这个字母会被放进list/tuple里面保存,否则会被过滤扔掉

    ...#2

    def get_upper_letter(letter):

        if letter >='A'and letter <='Z':

            return True

        else:

            return False

    #print (list(filter(get_upper_letter,"asJJKK")))#输出结果['J', 'J', 'K', 'K']

    #print (tuple(filter(get_upper_letter,"asJJKK")))#list也可以替换成tuple,放进一个tuple里面#输出结果('J', 'J', 'K', 'K')

    ...#3以上1,2是到3的主见演化过程

    def get_upper_letter(letter):

        if letter>='A' and letter<='Z':

           return True

        else:

            return False

    print ("".join(list(filter(get_upper_letter,"asJJKK"))))#输出结果:JJKK

    print ("".join(tuple(filter(get_upper_letter,"asJJKK"))))#输出结果:JJKK

    #只要纯数字--》其他过滤掉

    def get_upper_letter(letter):

        if letter>='0' and letter<='9':

           return True

        else:

            return False

    print ("".join(list(filter(get_upper_letter,"asJ1234Jgg789KK"))))#输出结果:JJKK

    print ("".join(tuple(filter(get_upper_letter,"asJ2345JKK08"))))

    reduce用法,累加

    #reduce 用法#首先是要reduce要引用包,reduce累加的用处

    from functools import reduce

    def add(a,b):

        return a+b

    print(reduce(lambda a,b:a+b,[1,2,3,4,5]))   #lambda匿名函数

    ...

    切片

    切片:序列:列表、元组、和字符串这些对于序列老说是可以使用的

    [起始位置:结束位置(开区间):步长]

    a="12345567"

    a[1:5:]#切片取2345

    >>> '2345'

     a[::-1]#倒着取

    >>>'76554321'

     a[::-2]

    >>> ‘7542'#间隔两位倒着取

    a[1:]#从第二位取,结束位置可以不写

    >>>'2345567'

    a[:5]#从第一位取到第四位,起始位置可以不写

    >>>'12345'

    a[:]#取全部

    >>> '12345567'

     a[::2]#两个两个取

    >>>'1356'

    a[-2:]#从倒着取后两位

    >>> '67'

     a[-3::-1]#从倒数第三位取前面的再倒着展示

    >>>'554321'

    a[-5:-2]#从倒数5个取到倒数第2个

    >>> '455'

    a[-1:-5:-1]

    >>>'7655’

    lambda:匿名函数

    Lambda里面既不能写if和while以及其他循环表达式

    func=lambda x,y:x+y

    func(2,3)

    >>>5

    推导列表

    [i for i in range(6)]

    >>>[0, 1, 2, 3, 4, 5]

    [i*i for i in range(6)]#平方,可以写表达式,以及嵌套两层循环

    >>>[0, 1, 4, 9, 16, 25]

    [i*i for i in range(10) if i%2==0]#取偶数的平方

    >>>[0, 4, 16, 36, 64]

    [i*i for i in range(10) if i%2==1]#取奇数的平方

    >>>[1, 9, 25, 49, 81]

    [i*s for i in range(3) for s in range(4)]#求排列组合的值

    >>>[0, 0, 0, 0, 0, 1, 2, 3, 0, 2, 4, 6]

    Processed: 0.011, SQL: 9