zoukankan      html  css  js  c++  java
  • python的map函数的使用方法详解以及使用案例(处理每个元素的自增、自减、平方等)

    1、用我们之前学过的求一下平方(只有一个列表)

    #求平方
    num=[1,5,6,2,7,8]
    a=[]
    for n in num:
        a.append(n**2)
    print (a)
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [1, 25, 36, 4, 49, 64]

    2、写成函数,这样在有多个列表的时候只要调用一下这个函数就可以了

    num=[1,5,6,2,7,8]
    num_1=[22,333,11,55,66]
    def map_atest(array):
        ret = []
        for n in array:
            ret.append(n**2)
        return ret
    ret=map_atest(num)
    ret1=map_atest(num_1)
    print (ret)
    print(ret1)
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [1, 25, 36, 4, 49, 64]
    
    [484, 110889, 121, 3025, 4356]

    3、现在需求又变了。要求列表里面的每个数自增加1

    num=[1,5,6,2,7,8]
    num_1=[22,333,11,55,66]
    def add_one(x):#1.定义一个自增1的函数
        return x+1
    def add_reduce_one(x):#2.定义一个自减1的函数
        return x-1
    def map_atest(func,array):#3.定义一个函数,需要穿2个参数
        ret = []#4.1定义一个空列表
        for n in array:#这个array是num传进来的列表,做for循环
            res=func(n)#func就是add_one这个函数,传的值是n,就把n自增加了1   add_one(n),然后赋值给变量
            ret.append(res)
        return ret
    print(map_atest(add_one,num))#4.  传2个参数add_one num 这2个都是函数
    print(map_atest(add_one,num_1))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]
    
    [23, 334, 12, 56, 67]

    我们把自增1和自减1都写成了函数,这样在下面一调用函数,把列表传进去就可以了

    num=[1,5,6,2,7,8]
    num_1=[22,333,11,55,66]
    def add_one(x):#1.定义一个自增1的函数
        return x+1
    def add_reduce_one(x):#2.定义一个自减1的函数
        return x-1
    def map_atest(func,array):#3.定义一个函数,需要穿2个参数
        ret = []#4.1定义一个空列表
        for n in array:#这个array是num传进来的列表,做for循环
            res=func(n)#func就是add_one这个函数,传的值是n,就把n自增加了1   add_one(n),然后赋值给变量
            ret.append(res)
        return ret
    print(map_atest(add_reduce_one,num))#4.  传2个参数add_reduceone num 这2个都是函数
    print(map_atest(add_reduce_one,num_1))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [0, 4, 5, 1, 6, 7]
    
    [21, 332, 10, 54, 65]

    4、在添加一个求平方的函数

    这样子看起来很灵活了,还不够好

    num=[1,5,6,2,7,8]
    num_1=[22,333,11,55,66]
    def add_one(x):#1.定义一个自增1的函数
        return x+1
    def reduce_one(x):#2.定义一个自减1的函数
        return x-1
    def pf_one(x):
        return x**2
    def map_atest(func,array):#3.定义一个函数,需要穿2个参数
        ret = []#4.1定义一个空列表
        for n in array:#这个array是num传进来的列表,做for循环
            res=func(n)#func就是add_one这个函数,传的值是n,就把n自增加了1   add_one(n),然后赋值给变量
            ret.append(res)
        return ret
    print(map_atest(add_one,num))#4.  传2个参数add_one num 这2个都是函数
    print(map_atest(reduce_one,num_1))
    print(map_atest(pf_one,num_1))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]
    
    [21, 332, 10, 54, 65]
    
    [484, 110889, 121, 3025, 4356]

    5、在上面的基础上,在进行精简,刚刚学了匿名函数,现在我们就可以用上了

    def add_one(x):#1.定义一个自增1的函数
        return x+1
    
    这个函数就等于  lambda x:x+1
    
     
    
    def add_reduce_one(x):#2.定义一个自减1的函数
        return x-1
    
    这个函数等于   lambda x:x-1
    
     
    
    def pf_one(x):
        return x**2
    
    这个函数等于  lambda x:x**2

    然后最后精简完成就是下面这样了,用了3个lambda代替了3个函数。代码更少了

    num=[1,5,6,2,7,8]
    num_1=[22,333,11,55,66]
    def map_atest(func,array):#3.定义一个函数,需要穿2个参数
        ret = []#4.1定义一个空列表
        for n in array:#这个array是num传进来的列表,做for循环
            res=func(n)#func就是add_one这个函数,传的值是n,就把n自增加了1   add_one(n),然后赋值给变量
            ret.append(res)
        return ret
    print(map_atest(lambda x:x+1,num))#4.  传2个参数add_one num 这2个都是函数
    print(map_atest(lambda x:x-1,num_1))
    print(map_atest(lambda x:x**2,num_1))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]
    
    [21, 332, 10, 54, 65]
    
    [484, 110889, 121, 3025, 4356]

    6、我们来看下map函数的用法,打印出来的是一个内存地址

    #我们看下系统内置函数map
    print (map(lambda x:x+1,num))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    <map object at 0x0000000000A14128>

    map处理的一个结果是一个迭代器,只能迭代一次

    rec=map(lambda x:x+1,num)
    for n in (rec):
        print (n)
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]
    
    2
    
    6
    
    7
    
    3
    
    8
    
    9
    rec=map(lambda x:x+1,num)
    # for n in (rec):
    #     print (n)
    print (list(rec))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]
    
    [2, 6, 7, 3, 8, 9]

    7、总结map函数的用法,需要传2个参数,在python内部,就相当于一个for循环,把每次遍历的那个数字交给这个处理方法

    map(一个处理方法,一个可迭代对象)

    8、map后面不一定用lambda,只用自定义函数也可以的

    num=[1,5,6,2,7,8]
    def add_one(x):#1.定义一个自增1的函数
        return x+1
    print (list(map(add_one,num)))
    
    C:python35python3.exe D:/pyproject/day14函数/map函数.py
    
    [2, 6, 7, 3, 8, 9]

    9、map函数处理字符串,把字符串都变成大写

    msg="gouguqoi"
    
    list(map(lambda x:x.upper(),msg))

    上面的代码是这样形成的

    第一步
    
    msg="gouguqoi"
    map(lambda x:x.upper(),msg)
    
    第二步
    
    msg="gouguqoi"
    list(map(lambda x:x.upper(),msg))
    
     
    
    第三步
    
    msg="gouguqoi"
    print (list(map(lambda x:x.upper(),msg)))

    10、将列表里面的元素变成字符串的类型

    num=[1,5,6,2,7,8]
    print(list(map(lambda x:str(x),num)))
    print(list(map(str,num)))
    
    ['1', '5', '6', '2', '7', '8']
    
    ['1', '5', '6', '2', '7', '8']

    map总结:

    处理序列中的每个元素,得到的结果是一个“列表”(迭代器),该“列表”个数已位置与原来一样,然后把每个元素依次交给前面的这个处理方法,最后得到一个列表的结果

  • 相关阅读:
    4、redis之使用commons-pool
    好用的eclipse properties插件
    1、redis之安装与配置
    谷歌浏览器禁止window.close的问题
    在浏览器中使用JS打开并展示PDF文件
    JAVA遍历Map的方法
    GEOS库学习之三:空间关系、DE-9IM和谓词
    GEOS库的学习之二:简单几何图形的创建
    GEOS库的学习之一:介绍和编译
    GEOS库在windows中的编译和测试(vs2012)
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9153514.html
Copyright © 2011-2022 走看看